一旦没有你上面的显示映射映射的路线,可以匹配来自
urlHelper.Action("Action", "Controller", routeValueDictionary);
产生的途径,那么你会在你担任安全使用路由名称。
例如,如果你有这样的定义两条路线......
routes.MapRoute(
"AnotherRouteName",
"{controller}/blah/{action}",
new { controller = "Controller", action = "Action" }
);
routes.MapRoute(
"RouteName",
"Url",
new { controller = "Controller", action = "Action" }
);
...那么第一条路线将由..
urlHelper.Action("Action", "Controller", routeValueDictionary);
UPDATE匹配:
如果你看看来源UrlHelper
你会注意到内部t嘿调用与相关的参数相同的方法相同的重载。
public virtual string Action(string actionName, string controllerName, object routeValues)
{
return GenerateUrl(null /* routeName */, actionName, controllerName, TypeHelper.ObjectToDictionary(routeValues));
}
public virtual string Action(string actionName, string controllerName, RouteValueDictionary routeValues)
{
return GenerateUrl(null /* routeName */, actionName, controllerName, routeValues);
}
//...other code removed for brevity
public virtual string RouteUrl(string routeName, object routeValues, string protocol)
{
return GenerateUrl(routeName, null /* actionName */, null /* controllerName */, protocol, null /* hostName */, null /* fragment */, TypeHelper.ObjectToDictionary(routeValues), RouteCollection, RequestContext, false /* includeImplicitMvcValues */);
}
太多的代码张贴在这里。看看课堂来源,更好地了解发生了什么。
无法提供更多的细节。我一直回到源代码。
是的,假设我的路线有独特的'controller'和'action'组合,'Action'和'RouteUrl'完全等价吗? –
前提是它们具有相同的路由值 – Nkosi