为什么在使用System.Web.Routing.Route时runAllManagedModulesForAllRequests为true

时间:2013-07-26 08:11:29

标签: webforms url-routing routetable

根据Scott Hanselman的文章,我们的Webforms项目中的runAllManagedModulesForAllRequests选项始终为false。

我们也有几条路线.MapPageRoute配置成功运行。

现在我们需要为我们的webform项目添加ICS(互联网日历)支持。要为用户创建一个干净,可读的URL(可由IHttpHandler处理),我添加了以下内容:

routes.Add(new Route("ical/{username}/{somecheck}", new ICalHandler()));

现在,网址是我们想要的方式,如下所示:

http://foo.com/ical/username/abc.ics

在localhost(VS2012,Windows 8)上,runAllManagedModulesForAllRequests可能为false。

在测试服务器(Win2k8 R2,IIS7.5)上,我收到“找不到页面”错误。但是,当我启用runAllManagedModulesForAllRequests时,它可以工作。

如果必须这样,那就这样吧。但我真的想知道为什么......有人可以解释为什么我需要启用此设置吗?

非常感谢提前。

1 个答案:

答案 0 :(得分:0)

from MSDN

对IIS 7进行的更新使runAllManagedModulesForAllRequests设置变得不必要,并且本机支持ASP.NET路由。 (有关此更新的信息,请参阅Microsoft支持文章可用的更新使某些IIS 7.0或IIS 7.5处理程序能够处理其URL不以句点结尾的请求。) 如果您的网站在IIS 7上运行,并且IIS已更新,则无需将runAllManagedModulesForAllRequests设置为true。实际上,不建议将其设置为true,因为它会增加请求的不必要的处理开销。如果此设置为true,则所有请求(包括.htm,.jpg和其他静态文件的请求)也将通过ASP.NET请求管道。 runAllManagedModulesForAllRequests的默认设置为false。如果站点的配置文件未将runAllManagedModulesForAllRequests显式设置为true,则在未安装SP1的Windows 7上运行网站时,IIS 7将不包含所需的更新。因此,路由不起作用,您将看到错误。如果您遇到路由不起作用的问题,可以执行以下操作: 将Windows 7更新为SP1,将更新添加到IIS 7。 安装上面列出的Microsoft支持文章中描述的更新。 在该网站的Web.config文件中将runAllManagedModulesForAllRequests设置为true。请注意,这会给请求增加一些开销。