工作,我需要的文化添加到URL支持本地化在我的asp.net MVC應用程序使用的URL,如:sample.com/ EN /約
sample.com/ EN /產品/ 2342Asp.Net MVC路由未如預期在5.1
我最近升級我的應用程序從MVC 5.0到5.1,但如預期的路由沒有工作,所以我創建了一個新的asp.net的MVC 5.0測試應用程序,並得到了文化只需幾分鐘即可在網址中顯示出來。但是,只要我將此測試應用程序升級到MVC 5.1,鏈接中不再生成文化,並且如果您手動將它輸入到URL中,則會出現404錯誤。
我壓縮了我的5.0和5.1測試應用程序here。我需要幫助理解爲什麼這不適用於MVC 5.1以及如何糾正它。也許我對路由的理解是有缺陷的,或者這對5.1是一個合法的錯誤?
在這個測試應用程序的主頁/關於行動已應用[Route("about")]
路由屬性和它的預期,在生成鏈接,這條路應該是localhost/en/about
而是它只是localhost/about
。如果您在地址欄中輸入localhost/en/about
,您將在Mvc 5.1測試應用程序中收到404錯誤。
下面是相關的代碼,不會在MVC 5.0工作:
public class RouteConfig
{
private const string STR_Culture = "culture";
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.LowercaseUrls = true;
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{culture}/{controller}/{action}/{id}",
defaults: new { culture = "en", controller = "Home", action = "Index", id = UrlParameter.Optional }
);
foreach (var item in routes)
{
// this works in MVC 5.0
if (item is Route)
{
var route = item as Route;
if (route.Url.IndexOf("{" + STR_Culture + "}") == -1)
route.Url = String.Format("{{{0}}}/{1}", STR_Culture, route.Url);
//AddCulture(route.Defaults);
}
}
}
private static void AddCulture(RouteValueDictionary dictionary)
{
if (dictionary == null)
dictionary = new RouteValueDictionary();
if (dictionary.ContainsKey(STR_Culture) == false)
dictionary.Add(STR_Culture, "en");
}
}
在'for-loop'和對方法的調用中,你是否簡單地將文化默認爲「en」?無法分辨出該做什麼。 –