在我的ASP.NET应用程序中,我有两个HTTP模块。其中一个用于重写URL,另一个用于特定于应用程序的内容(自定义身份验证等)。 URL重写模块是针对所有请求执行的,而另一个模块仅针对托管文件扩展名执行,例如.aspx
以下是如何在web.config中定义模块(请注意,对于UrlRewriteModule,preCondition为空。这会导致它对所有请求执行):
<system.webServer>
<modules>
<add name="UrlRewriteModule" type="MySite.UrlRewriteModule" preCondition="" />
<add name="SiteModule" type="MySite.SiteModule" preCondition="managedHandler" />
</modules>
</system.webServer>
在UrlRewriteModule中,我使用RewritePath()将一些URL(类似目录)重写为带有查询字符串的文件。例如,从“/ p / 5 / some-thoughts-about-the future /”到“/post.aspx?id=5”
现在,我的印象是,当URL被重写时,如果新URL用于托管扩展(如.aspx),IIS7将执行托管模块(在本例中为SiteModule)。但是,情况似乎并非如此。我注意到SiteModule没有针对任何重写的URL执行。
我是否遗漏了某些内容(或做错了什么),或者这是IIS7中的正常行为?
我遇到了Server.TransferRequest(),它实际上解决了问题(在幕后,它涉及创建一个新的子请求)。但是,这也可以cause a lot of overhead。在服务器负载下,我通常更愿意避免它。
那么,有没有办法在不使用Server.TransferRequest()的情况下重写URL时让SiteModule执行?
谢谢!