【问题标题】:(ASP MVC4) Attribute Routing / RedirectToRoute(ASP MVC4) 属性路由/RedirectToRoute
【发布时间】:2013-11-13 09:55:37
【问题描述】:

对于我想要实现的目标,我需要一点帮助。 我正在做一个 ASP MVC 应用程序,但我无法正确地制作路线。

我正在使用 nuget 包属性路由(现在在 MVC5 中默认使用)。

首先我在正确匹配正确事物的所有路线上都没有任何问题,但后来我开始致力于国际化,一切都搞砸了!

所以问题来了:

我需要获取这些网址:domain/culture/id/product/action 但我的产品只有一个 Action。因此,当用户访问我的网站时,它会设置语言,然后将他重定向到他询问的产品(如果没有询问,则使用默认产品)

我试过了

return RedirectToRoute("/" + cultureName + "/" + id + "/" + productName + "/");

但它没有告诉我该路线不存在,这是不可能的,因为在我的路由资源管理器中,我清楚地看到了路线 /{culture}/{id}/ProductName

是否可以这样做,还是我需要改变我对路由的看法?

【问题讨论】:

    标签: c# asp.net-mvc-4 asp.net-mvc-routing attributerouting


    【解决方案1】:
    return RedirectToRoute("SomeRouteName", new { 
        culture = cultureName,
        id = id, 
        productName = productName 
    });
    

    以及您的路线定义:

    routes.MapRoute(
        "SomeRouteName",
        "{culture}/{id}/{productName}",
        new { controller = "Home", action = "Index" }
    );
    

    请注意,路由的模式是{culture}/{id}/{productName},在调用 RedirectToAction 时需要指定每个令牌。由于您在此控制器中只有一个操作,因此您无需指定它。它在您的路线中定义。

    【讨论】:

    • 它就像一个魅力,但我不得不取消路线的名称。那么使用 Attribute Routing 没有办法做到这一点吗? (这在代码重讲和可维护性方面似乎真的更好)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 2014-02-12
    • 2018-10-19
    • 2013-11-14
    • 2014-12-04
    • 2015-12-02
    相关资源
    最近更新 更多