我正在创建一个应该支持多种语言的 MVC5 网站。应用程序的结构很复杂,所以我只使用属性路由。 RouteConfig.cs
非常简单:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
}
我想通过在站点名称后添加语言标识符来保留 URL 中的语言信息。对于默认语言英语,URL 应保持“干净”。下面是一个例子:
http://test.com/foo/1/bar/2
http://test.com/de/foo/1/bar/2
我的第一次尝试是为每个 Controller 使用两个 RoutePrefix
属性:
[RoutePrefix("foo")]
[RoutePrefix("{lang}/foo")]
但是 MVC 不允许为 Controller 使用多个 RoutePrefix
属性。
所以现在我根本不使用 RoutePrefix
属性,而是为每个 Controller 操作指定完整路由:
[Route("foo/{a}/bar/{b}")]
[Route("{lang}/foo/{a}/bar/{b}")]
有没有更好的方法来处理 lang
路由?理想情况下,我只想在一个地方指定,而不是为每个 Controller 指定。
附言。我通过在自定义过滤器中解析语言路由来设置当前线程文化。
最佳答案
我发现最简单的解决方案(至少对于 ASP.NET MVC 5.2 而言)是为可选参数使用默认值。
例如,如果英语是您的默认语言,您可以在 Controller 上使用单个属性:
[RoutePrefix("{lang=en}/foo")]
或操作上的单个属性:
[Route("{lang=en}/foo/bar")]
请注意,如果可选的 URI 参数(例如 {lang?}
)位于 URL 的开头,则它们将不起作用。
关于c# - 为多语言站点配置 ASP.NET MVC 属性路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35819524/