gpt4 book ai didi

asp.net-mvc-3 - ASP.net MVC3 多语言路由重写

转载 作者:行者123 更新时间:2023-12-04 20:21:58 24 4
gpt4 key购买 nike

有没有什么好的方法可以为多语言 Web 应用程序创建路由重写?

URL 架构应如下所示
http://<Domainname>/{Language}/{Controller}/{Action}/{Id}
但是也应该支持没有语言部分的 URL,但它们不应该只是直接映射到 Controller ,而是生成重定向响应。

这里重要的是重定向不应硬编码为特定语言,而应根据用户首选语言等因素(如果可能)进行确定。

注:确定正确语言的过程不是问题,而是如何进行非静态重写。

谢谢

最佳答案

我通过以下路线进行了管理;

    routes.MapRoute(
"Default", // Route name
"{language}/{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", language = "tr", id = UrlParameter.Optional }, // Parameter defaults
new { language = @"(tr)|(en)" }
);

我通过覆盖 DefaultControllerFactory 的 GetControllerInstance() 方法来处理文化。例子如下;
public class NinjectControllerFactory : DefaultControllerFactory {

protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType) {

//Get the {language} parameter in the RouteData

string UILanguage;

if (requestContext.RouteData.Values["language"] == null) {

UILanguage = "tr";
}
else {

UILanguage = requestContext.RouteData.Values["language"].ToString();
}

//Get the culture info of the language code
CultureInfo culture = CultureInfo.CreateSpecificCulture(UILanguage);
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;

return base.GetControllerInstance(requestContext, controllerType);
}

}

并在 global.asax 上注册;
protected void Application_Start() {

//other things here


ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
}

关于asp.net-mvc-3 - ASP.net MVC3 多语言路由重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5513993/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com