1
我跟着关于ASP.NET MVC 5国际化这篇大文章(由asp.net网站refered): http://afana.me/post/aspnet-mvc-internationalization.aspxASP.NET MVC 5国际化 - 文化八方通默认
实施后,我只有一个问题,我解决不了。 在MVC5中,使用网址中的文化(不使用cookie),文化总是默认的,永远不会让浏览器发送用户偏好的语言。
详细信息: 问题在于MapRoute中的文化默认设置,它以默认的硬编码文化为网站开始。然后在BeginExecuteCore中,RouteData.Values [“culture”]总是充满默认文化,永远不会从Request.UserLanguages获得文化。 即使文化不存在于URL中,例如在第一次站点根访问时,RouteData.Values [“culture”]也会被填充。
如何正确更改此行为?
也许创造2条路线,一条没有文化?
相关的代码:
routes.MapRoute(
name: "Default",
url: "{culture}/{controller}/{action}/{id}",
defaults: new {culture = CultureHelper.GetDefaultCulture(), controller = "Home", action = "Index", id = UrlParameter.Optional }
);
protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state)
{
string cultureName = RouteData.Values["culture"] as string;
// Attempt to read the culture cookie from Request
if (cultureName == null)
cultureName = Request.UserLanguages != null && Request.UserLanguages.Length > 0 ? Request.UserLanguages[0] : null; // obtain it from HTTP header AcceptLanguages
//...
}