Ответ 1
Между источником для System.Web.Mvc.RouteCollectionExtensions
в CodePlex и небольшим ILSpy на моем локальном GAC для System.Web.Routing.RouteCollection
, похоже, что нет разницы, хотя у них, похоже, есть полностью независимый код, чтобы делать то же самое.
RouteCollection.IgnoreRoute
(через Источник CodePlex)
public static void IgnoreRoute(this RouteCollection routes, string url, object constraints) {
if (routes == null) {
throw new ArgumentNullException("routes");
}
if (url == null) {
throw new ArgumentNullException("url");
}
IgnoreRouteInternal route = new IgnoreRouteInternal(url) {
Constraints = new RouteValueDictionary(constraints)
};
routes.Add(route);
}
RouteCollection.Ignore
(через декомпиляцию ILSpy)
public void Ignore(string url, object constraints) {
if (url == null) {
throw new ArgumentNullException("url");
}
RouteCollection.IgnoreRouteInternal item = new RouteCollection.IgnoreRouteInternal(url) {
Constraints = new RouteValueDictionary(constraints)
};
base.Add(item);
}
Различия
Единственное реальное различие - очевидная разница в местоположении, одна из которых является методом экземпляра в самом классе RouteCollection
, а другая - методом расширений для этого класса. После того, как вы учитываете различия кода, возникающие в результате выполнения экземпляра или расширения (например, важная нулевая проверка расширенного экземпляра), они выглядят идентичными.
По своей сути они оба используют тот же класс StopRoutingHandler
. Оба имеют свои собственные версии закрытого класса IgnoreRouteInternal
, но эти версии идентичны в коде.
private sealed class IgnoreRouteInternal : Route {
public IgnoreRouteInternal(string url)
: base(url, new StopRoutingHandler()) {
}
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary routeValues) {
return null;
}
}