它附加两个值,因为默认情况下MVC注册了这样的ValueProviderFactory:
public sealed class RouteDataValueProviderFactory : ValueProviderFactory
返回IValueProvider- RouteDataValueProvider的实现:
public sealed class RouteDataValueProvider : DictionaryValueProvider<object>{ // RouteData should use the invariant culture since it's part of the URL, and the URL should be // interpreted in a uniform fashion regardless of the origin of a particular request. public RouteDataValueProvider(ControllerContext controllerContext) : base(controllerContext.RouteData.Values, CultureInfo.InvariantCulture) { }}基本上,它只是将Dictionary绑定到当前路由的路由值。
例如,如果您将此类数据添加到的路由中
RouteConfig:
routes.MapRoute( name: "Default", url: "{controller}/{action}", defaults: new { controller = "Home", action = "Index", SomeSpecificRouteData = 42 });那么你的字典将有3个值-
controller,
action和
SomeSPecificRouteData。
另一个示例是您可以定义此类操作:
public ActionResult Index(string action, string controller, int SomeSpecificRouteData)
并将
RouteDataValueProvider您路线中的数据作为参数传递给这些方法。这样,MVC将路由的参数绑定到操作的实际参数。
如果要删除此类行为,则只需进行迭代
ValueProviderFactories.Factories并
RouteDataValueProviderFactory从中删除。但是,您的路由可能会遇到参数绑定问题。



