不要随便使用 runAllManagedModulesForAllRequests="true" 来解决问题
在 IIS 7.0 中,对于使用 Url 路由 访问页面的 ASP.NET 应用程序,IIS可能会不能出 Url 是对 ASP.NET 的请求。
会显示404啊,403啊之类的错误代码(因为路径不存在,或者不允许查看目录)。
网上一般的解决方案比较“粗暴”,直接设置 runAllManagedModulesForAllRequests="true" 即可。
因为这样会让所有的请求都要经由 .NET 来处理,不管是什么路径文件,这样确实能解决当前的问题。
但是这样会让所有的请求都经 .NET 处理(刚才好像说过了╮(╯-╰)╭),一方面会让 .NET 比较累,所有静态文件请求也需要处理。
另一方面,也可能会让程序的内容变得更复杂,比如如果有代码会根据请求的 Url 来处理一些事情。
所以,既然是 Url 的问题,那么尽量就不要给别人添麻烦(>﹏<)
经网上查找,找到了一个看起来比较好的解决方案。如上图所示,Url 路由是由 UrlRoutingModule 这个模块来处理的。
在某些 IIS 版本中,并不会将所有请求交给 UrlRoutingModule 处理,所以,我们可以在 Web.config 中进行如下设置:
<system.webServer> <modules> <remove name="UrlRoutingModule-4.0" /> <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" /> </modules> </system.webServer> </configuration>
首先移除掉原有的 UrlRoutingModule,然后再添加一下,不过这次添加将把 preCondition 设为空,这样貌似就可以了~
具体 preCondition 的可选值可以看这里:
https://www.iis.net/configreference/system.webserver/modules/add
感觉 runAllManagedModulesForAllRequests="true" 太不友好了,以后如果再遇到相关的问题,还是要找到对应的模块来进行针对性的处理比较好。
要刨根问底~
以上方法搜集自网络:
http://www.cnblogs.com/xishuai/p/Styles-Render-runAllManagedModulesForAllRequests-true.html
http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html
输了你,赢了世界又如何...