为什么runAllManagedModulesForAllRequests=“;真“;为403工作

本文关键字:工作 runAllManagedModulesForAllRequests 为什么 | 更新日期: 2023-09-27 18:08:49

Backstory我开发MVC应用程序,在我的大多数公司的Web服务器上,每当我部署MVC应用程序时,当我试图浏览到该网站时,我都会得到403。我知道

<system.webServer>
   <modules runAllManagedModulesForAllRequests="true"/> 
 </system.webServer>

是一个需要摆脱的解决方案,至少我在我们的一些网络服务器上(如果不是全部的话(总能找到403。

我的问题是为什么修复403有效?由于访问被拒绝,缺少什么模块?还有什么比运行所有模块更好的解决方案呢?

为什么runAllManagedModulesForAllRequests=“;真“;为403工作

基本上;比特";是FormsAuthentication模块。

IIS核心引擎使用先决条件来确定何时启用特定模块。例如,性能原因可能决定您只想为同样进入托管处理程序的请求执行托管模块。以下示例中的前置条件(前置条件="managedHandler"(仅为同样由托管处理程序处理的请求(例如对.aspx或.asmx文件的请求(启用表单身份验证模块。

如果删除属性precondition=";managedHandler";,Forms Authentication也适用于托管处理程序(如.html、.jpg、.doc(不提供服务的内容,但也适用于经典的ASP(.ASP(或PHP(.PHP(扩展

这里的重点是">Forms Authentication也适用于托管处理程序不提供服务的内容,如.html、.jpg、.doc">

设置runAllManagedModulesForAllRequests="true"可以有效地使所有模块始终运行,而不考虑前置条件,这消除了FormsAuthenticationModule的前置条件。

https://learn.microsoft.com/en-us/iis/get-started/introduction-to-iis/iis-modules-overview#preconditions