它附加了两个值,因为默认情况下 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。但是你的路由可能会遇到参数绑定问题。