asp.net-mvc-routing - 如何设置 ASP.Net MVC 路由参数

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

我正在创建一个国际化的网站,我想做的是支持这种格式的 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)" }
);

我通过覆盖 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);
    }

}

您可以在这里从 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/

相关文章:

asp.net-mvc - 在自定义 ASP MVC 路由中为 URL 起别名

asp.net-mvc - MVC 区域的后备路线

asp.net-mvc - ASP.NET MVC : Get URLs to RouteTable Routes

c# - 如何将参数传递给 Controller ​​构造函数?这是正确的做法吗?

c# - ASP.NET MVC 路由 : How do I omit "index" from a URL

c# - 如何将 www.example.com 重定向到 example.com?

c# - 通过 Web API 使用 Entity Framework 进行分页

c# - MVC4包安装错误

javascript - 在 Razor View 页面中使用 C# 对象

asp.net-mvc-4 - MVC4和页面生命周期?