不要随便使用 runAllManagedModulesForAllRequests="true" 来解决问题

在 IIS 7.0 中,对于使用 Url 路由 访问页面的 ASP.NET 应用程序,IIS可能会不能出 Url 是对 ASP.NET 的请求。

会显示404啊,403啊之类的错误代码(因为路径不存在,或者不允许查看目录)。

网上一般的解决方案比较“粗暴”,直接设置 runAllManagedModulesForAllRequests="true" 即可。

因为这样会让所有的请求都要经由 .NET 来处理,不管是什么路径文件,这样确实能解决当前的问题。

但是这样会让所有的请求都经 .NET 处理(刚才好像说过了╮(╯-╰)╭),一方面会让 .NET 比较累,所有静态文件请求也需要处理。

另一方面,也可能会让程序的内容变得更复杂,比如如果有代码会根据请求的 Url 来处理一些事情。

所以,既然是 Url 的问题,那么尽量就不要给别人添麻烦(>﹏<)

image

经网上查找,找到了一个看起来比较好的解决方案。如上图所示,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

posted @ 2015-08-26 15:39  不是豆豆  阅读(4468)  评论(0编辑  收藏  举报
友情链接:迷途