背景
我使用通常的aspnet的MVC5 / razor / jquery继承了一个电子商务网站。我们的目标是对网站进行gobalizating并添加语言选择器,以支持两种主要的国家/语言定位策略。我刚刚完成了第一步,它正在路由网站,以便它处理domain.com/en/,domain.com/es/,domain.com/es-mx / ...使用http://jittuu.com/2014/3/17/AspNet-localization-routing之后,使用不存在的语言环境进入域重定向到默认语言环境。有一个自定义的IRouteHandler获取httprequest,检查语言环境并在需要时放置它:
Public Class LocalizationRedirectRouteHandler
Implements IRouteHandler
Public Function GetHttpHandler(requestContext As RequestContext) As IHttpHandler Implements IRouteHandler.GetHttpHandler
Dim routeValues = requestContext.RouteData.Values
Dim cookieLocale = requestContext.HttpContext.Request.Cookies("locale")
If cookieLocale IsNot Nothing Then
routeValues("culture") = cookieLocale.Value
Return New RedirectHandler(New UrlHelper(requestContext).RouteUrl(routeValues))
End If
Dim uiCulture = CultureInfo.CurrentUICulture
routeValues("culture") = uiCulture.Name
Return New RedirectHandler(New UrlHelper(requestContext).RouteUrl(routeValues))
End Function
End Class
对于没有@Html帮助程序的网站上的路由,有数千个的“内联”AJAX调用,因为项目有单独的捆绑js文件,失败。有数百的路由失败,因为项目控制器正在使用属性路由,并且它没有指定区域设置。例如,指向产品功能的简单链接失败,因为控制器具有指定
的路径/product/{id}
但网址看起来像
/es-MX/product/{id}
问题:
在这里进行的正确方法是什么?
我期待那些没有语言环境的AJAX和链接被重定向,但它们不是。
我应该重写所有这些文件,以便指定当前的区域设置吗?还有其他“健康”的方法吗,比如扩展BaseController并将文化添加为路由前缀?
提前感谢你的时间,我在这里非常失落。
答案 0 :(得分:0)
事实证明,@ NightOwl888的this answer是我找到的最接近我遇到的问题的解决方案。将这些更改包含在我的项目之后,我几乎所有的工作都在运行,并在URL上运行了一个精彩的文化前缀。但仍有一些事情要解决: