我正在创建一个国际化的网站,我想做的是支持这种格式的 URL:
"{country}/{controller}/{action}"
我如何告诉路由引擎应该使用 session 变量设置{country}?
最佳答案
您可以使用自定义 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 LocalizedControllerFactory : 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);
}
}
您可以在这里从 session 中获取值,而不是像我那样对其进行硬编码。
并在 Global.asax 上注册它:
protected void Application_Start() {
//...
ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
}
关于asp.net-mvc-routing - 如何设置 ASP.Net MVC 路由参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9486025/