有一个网址
http://mysite.com/en-us/articles/browse/en-us/12/byCategory
众所周知,其中一个参数名为culture
。当然,我可以致电ViewContext.RouteData.Values["culture"]
来获取culture
的值,但它并没有说明我en-us
参数(第一个或第二个){ {1}}。
我的任务是识别哪个名为culture
的参数,用指定的值替换它并返回新的url。怎么做?
答案 0 :(得分:3)
因此,如果您说ViewContext.RouteData.Values["culture"]
,您将获得与第一个或第二个特定段相关的正确文化值,具体取决于您的路径网址定义像:
{culture}/{controller}/{action}/{lang}/{id}/{filter}
正如您所看到的,只有一个名为culture
的段参数。
注意:上部路线网址定义可能与您的不同,但它会显示一个可以处理您的请求网址的示例。
但是否则您可以通过以下方式获取当前正在执行的路径URL定义以找到正确的段:
((Route)ViewContext.RouteData.Route).Url
将RouteBase
转换为Route
可能会在99%的情况下有效,因为使用自定义路由类并不常见,但即使自定义类更有可能从Route
继承比RouteBase
。
根据路径定义的复杂性,解析此URL定义可能是一项更具挑战性的任务。但是,您可以或多或少地成功地将任何URL定义与请求URL段匹配。这可能正是你所追求的。
但是,不是解析路由的URL并替换正确的段,您可以让路由本身只为您执行:
((Route)ViewContext.RouteData.Route)
.GetVirtualPath(
ViewContext.RequestContext,
new RouteValueDictionary(new { culture = "en-GB" }))
.VirtualPath