在IIS7集成模式下为重写的URL执行托管模块

时间:2010-12-14 14:29:18

标签: asp.net iis-7 url-rewriting

在我的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执行?

谢谢!

0 个答案:

没有答案