大佬教程收集整理的这篇文章主要介绍了asp.net-mvc – 使URL特定于(通过路由),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我们想建立我们的URL完全语言具体,意思
这是在RouteConfig中完成的
url: "{language}/{controller}/{action}/{id}"
但那么棘手的部分:
即使控制器名称以多种语言显示,但指向同一控制器.这是甚么可能吗?
语言变化部分很容易,可以像下面这样做.
你可能想看的是全球化.基本上,语言部分对应于当前线程的UI文化.您需要的是以下内容:
>定义一条路线,像这样:
var lang = System.Threading.Thread.CurrentThread.CurrentUICulture.Name; routes.MapRoute( name: "Default",url: "{language}/{controller}/{action}/{id}",defaults: new { language = lang,controller = "Home",action = "Index",id = UrlParameter.Optional } );
注册Application_AcquireRequestState并定义如下:
protected void Application_AcquireRequestState() { var routes = RouteTable.Routes; var httpContext = Request.RequestContext.HttpContext; if (httpContext == null) return; var routeData = routes.GetRouteData(httpContext); var language = routeData.Values["language"] as string; var cultureInfo = new CultureInfo(language); System.Threading.Thread.CurrentThread.CurrentCulture = cultureInfo; System.Threading.Thread.CurrentThread.CurrentUICulture = cultureInfo; }
虽然CurrentUICulture是您需要切换语言从资源文件加载信息,但您也应将CurrentCulture更改为相同的CultureInfo;
>最后,请确保您具有相应的资源文件和后备资源文件.
我使用CultureInfo的Name属性,以便您的德语将是de-DE,英语en-US等.
这应该是诀窍.
如果您需要更多信息,我可以上传一个示例MVC项目供您检查.
更新:一个粗俗的做法,就是将路线段的顺序转换成如下所示:
routes.MapRoute( name: "NewDefault",url: "{language}/{id}/{action}/{controller}",id = "Category"} );
这样,您可以提出以下请求http://www.your_url.com/de/Kategorien.在这种情况下,Kategorien映射到id而不是控制器.您的控制器保持英文或德文(取决于您的名称),但用户看到不同的语言.在你的背景下,你的看法可能是这样的:
public ActionResult Index(string id,string categoryName) { // Fetch data based on category name (categoryName) return View(); }
您可以传递附加信息作为参数,但您需要调整路线,如下所示:{language} / {category} / {subcategory} / {action} / {controller}
只要知道这可能会在长期的脖子上变得痛苦,如果你尝试这样做,那么请确保你记录得很好.
以上是大佬教程为你收集整理的asp.net-mvc – 使URL特定于(通过路由)全部内容,希望文章能够帮你解决asp.net-mvc – 使URL特定于(通过路由)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。