【问题标题】:How to set ASP.Net MVC Routing parameter如何设置 ASP.Net MVC 路由参数
【发布时间】:2012-02-29 01:44:10
【问题描述】:

我正在创建一个国际化的网站,我想做的是支持这种格式的 URL:

"{country}/{controller}/{action}"

如何告诉路由引擎应该使用会话变量设置 {country}?

【问题讨论】:

  • 查询:如果您在路线中使用国家,为什么需要在会话中维护它?您可以使用路由作为通过页面请求保留所选国家/地区的一种方式,从而无需使用 session 来记住这一点。
  • 如果有人连接到 localhost/ {controller} = "Home", {Action} = "Index"。但是对于 {country},如果用户来自英语国家 {country} = "en"、西班牙语国家 "es"、法语国家 "fr" 等等。我想将 {country} 存储在会话变量中以重复使用它,但我愿意接受所有建议。

标签: asp.net-mvc-routing asp.net-mvc-4


【解决方案1】:

您可以使用自定义控制器工厂来执行此操作。从您的路线开始:

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)" }
);

我通过覆盖DefaultControllerFactoryGetControllerInstance 方法来处理文化。示例如下:

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);
    }

}

您可以在这里从会话中获取值,而不是像我一样对其进行硬编码。

并在 Global.asax 上注册:

protected void Application_Start() {

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多