NullReferenceException仅通过使用" runAllManagedModulesForAllRequests =" true"?

时间:2014-03-17 16:34:48

标签: asp.net asp.net-mvc asp.net-mvc-5 nullreferenceexception

我创建了一个在本地计算机上运行正常的MVC5应用程序,但在我们的测试服务器(Server 2008和IIS 7)上使用NullReferenceException时会抛出AuthorizeAttribute。我可以用它清理一下 web.config文件中的runAllManagedModulesForAllRequests="true",但我知道这不是一个干净的修复程序。

如果已经找到完全相同的问题here,但尚未提出任何答案,我在其他地方找不到任何不涉及此方法的建议。当然,必须有比runAllManagedModulesForAllRequests="true"更好的方法来解决空引用问题(尽管这确实可以解决错误)?

1 个答案:

答案 0 :(得分:1)

IIS和IIS Express对请求身份验证有一些不同的行为。由于表单身份验证模块并不总是运行,因此HttpContext.User.Identity方法执行时可能无法设置AuthorizeAttribute.AuthorizeCore()属性(因此为NullReferenceException)。

您可以仅更改FormsAuthenticationModule的前提条件,而不是为所有请求加载所有模块。默认情况下,FormsAuthenticationModule具有:preCondition="managedHandler"

<system.webServer>
  <modules runAllManagedModulesForAllRequests="false">
    <remove name="FormsAuthentication" />
    <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" preCondition="" />
  </modules>
</system.webServer>