gpt4 book ai didi

asp.net-mvc - RouteCollection.Ignore和RouteCollection.IgnoreRoute之间的区别?

转载 作者:行者123 更新时间:2023-12-03 13:31:54 24 4
gpt4 key购买 nike

RouteCollection.Ignore(url, constraints)RouteCollection.IgnoreRoute(url, constraints)有什么区别?
背景
新的MVC项目在Global.asax IgnoreRoute方法中包括此RegisterRoutes调用,以跳过路由到ASP.NET系统中其他地方处理的.axd位置的请求。

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

我想为项目添加一条额外的忽略路线,然后开始输入新行。在 routes.I之后,Intellisense弹出并显示 .Ignore.IgnoreRoute,两者听起来大致相同。
根据MSDN文档,您可以看到一个是 System.Web.Routing.RouteCollection类的实例方法,另一个是 System.Web.Mvc.RouteCollectionExtensions中对该类的扩展方法。

RouteCollection.Ignore:“定义一个URL模式,如果请求URL满足指定的约束,则不应检查该模式是否与路由匹配”( MSDN docs)。
RouteCollection.IgnoreRoute:“忽略给定的可用路由列表和约束列表的指定URL路由”( MSDN docs)。

两者都采用路由URL模式和一组约束,以限制该路由在该URL模式上的应用。

最佳答案

source for System.Web.Mvc.RouteCollectionExtensions on CodePlex和在System.Web.Routing.RouteCollection的本地GAC上运行一些ILSpy之间,虽然它们似乎具有完全独立的代码来执行相同的操作,但似乎没有什么区别。

RouteCollection.IgnoreRoute(通过CodePlex source

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类本身的实例方法,另一个是该类上的扩展方法。在考虑了实例与扩展执行之间的代码差异(例如,扩展实例上的重要null检查)之后,它们看起来是相同的。

它们的核心都使用完全相同的 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;
}
}

关于asp.net-mvc - RouteCollection.Ignore和RouteCollection.IgnoreRoute之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11544338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com