我可以以某种方式向ASP.NET部分仅发送与某些模式匹配的请求吗?
例如。使用像*.mvc
这样的正则表达式来简单/\d+[.]mvc/i
或更复杂?
我的system.webServer
web.config
下有下一行
<modules runAllManagedModulesForAllRequests="true">
<remove name="UrlRoutingModule" />
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</modules>
<handlers>
<remove name="UrlRoutingHandler" />
<add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpNotFoundHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</handlers>
答案 0 :(得分:0)
你的问题不是很清楚,但让我试一试。
最初收到请求时,IIS会将URL映射到处理程序。有托管处理程序(asp.net)和非托管处理程序(IIS内置)。具有托管处理程序的请求将进入ASP.NET并由管道中的各个托管模块处理。在您为runAllManagedModulesForAllRequests=”true”
设置managedHandler
或删除“UrlRoutingModule
”前置条件之前,托管代码也不会处理具有非托管处理程序的请求。
UrlRoutingModule检查请求,并根据路由表更改处理程序映射。如果它不更改处理程序映射,则将使用原始处理程序映射 - 由IIS设置的映射。
自asp.net 4.0以来,它也是无扩展Url的新通用“*”处理程序。
有时在改写和重写之间会有很大的误解。路由。 URL重写用于在Web服务器处理请求之前操作URL路径。 (重写模块不知道哪个处理程序最终将处理请求,请求处理程序可能不知道URL已被重写。另一方面,ASP.NET路由用于根据请求的URL路径将请求分派给处理程序这是一种先进的处理程序映射机制。
以下是我的根web.config
的托管处理程序示例<httpHandlers>
<add path="trace.axd" verb="*" type="System.Web.Handlers.TraceHandler" validate="True" />
<add path="*.aspx" verb="*" type="System.Web.UI.PageHandlerFactory" validate="True" />
<add path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory" validate="True" />
<add path="*.asmx" verb="*" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False" />
...
<add path="*.config" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
<add path="*.cs" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
<add path="*.csproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
<add path="*.vb" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />
...
<add path="*" verb="GET,HEAD,POST" type="System.Web.DefaultHttpHandler" validate="True" />
<add path="*" verb="*" type="System.Web.HttpMethodNotAllowedHandler" validate="True" />
</httpHandlers>
如您所见,此配置映射到System.Web.UI.PageHandlerFactory
但将* .cs映射到System.Web.HttpForbiddenHandler
(不想公开* .cs文件)。
至于大多数问题,有很多方法可以解决您的问题:清除所有处理程序,使用路由,......
希望这更清楚。