我创建了一个在本地计算机上运行正常的MVC5应用程序,但在我们的测试服务器(Server 2008和IIS 7)上使用NullReferenceException
时会抛出AuthorizeAttribute
。我可以用它清理一下
web.config文件中的runAllManagedModulesForAllRequests="true"
,但我知道这不是一个干净的修复程序。
如果已经找到完全相同的问题here,但尚未提出任何答案,我在其他地方找不到任何不涉及此方法的建议。当然,必须有比runAllManagedModulesForAllRequests="true"
更好的方法来解决空引用问题(尽管这确实可以解决错误)?
答案 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>