ASP MVC AttributeRoutes在URL中使用Languagetoken,保留原始Url

时间:2014-07-08 10:34:48

标签: asp.net-mvc-5 asp.net-mvc-routing

我正在使用asp mvc 5.2的属性路由。

我希望用户能够使用“de”或“en”等语言标记来调用网址。

  

MYDOMAIN / EN /富

为此,我创建了一个routeattribute,其约束条件如此blog post

中所述

当语言环境部分位于末尾时,这很有效:

[LocaleRoute("home/index/{locale}/","de)]

然后我可以拨打主页/索引主页/索引/ de

但是当我把它移到开头时,我不能再省略语言环境了。

[LocaleRoute("{locale}/home/index","de)]

我只能调用 de / home / index ,但主页/索引会返回 404 Notfound。也没有调用约束。看起来路线不仅仅是找到了。

关于我做错了什么以及我该做什么的任何提示?

1 个答案:

答案 0 :(得分:0)

您可能需要指定区域设置是可选参数:

[LocaleRoute("{locale?}/home/index","de")]

另一方面,您使用的是不同的控制器吗?恩?如果您使用单个控制器,则不需要LocaleRoute并且可以使用默认属性(http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx):

[RouteArea("{locale?}/home/")]
public class HomeController : Controller
{
    ...
    [Route("index")]
    public ActionResult Index (string culture)
    {
         ...
    }
}

修改

您还可以使用以下附加路线注册您的操作,只要您注意为文化提供默认值或处理null。

[Route("/home/index")]