加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 03:25:46 所属栏目:asp.Net 来源:网络整理
导读:有没有什么好方法可以为多语言Web应用程序创建路由重写? URL架构应如下所示 HTTP://域名 / {语言} / {控制器} / {操作} / {ID} 但是也应该支持没有语言部分的URL,但它们不应该直接映射到控制器,而是生成重定向响应. 这里重要的是,重定向不应该硬编码为特定
有没有什么好方法可以为多语言Web应用程序创建路由重写?

URL架构应如下所示

HTTP://<域名> / {语言} / {控制器} / {操作} / {ID}

但是也应该支持没有语言部分的URL,但它们不应该直接映射到控制器,而是生成重定向响应.

这里重要的是,重定向不应该硬编码为特定语言,而是根据用户首选语言等因素确定.

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

谢谢

解决方法

我通过以下路线管理;

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读