【问题标题】:NullReferenceException only cleared up by using "runAllManagedModulesForAllRequests="true"?NullReferenceException 仅通过使用“runAllManagedModulesForAllRequests="true" 清除?
【发布时间】:2014-03-17 16:34:48
【问题描述】:

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

如果已经找到完全相同的问题here,但还没有给出答案,我在其他任何地方都找不到不涉及这种方法的建议。肯定有比runAllManagedModulesForAllRequests="true" 更好的方法来解决空引用问题(尽管这确实可以清除错误)?

【问题讨论】:

  • 错误消息的堆栈跟踪怎么样?这将有助于我们为您提供更好的答案。

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


【解决方案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>

【讨论】:

  • 非常感谢!我也必须为“DefaultAuthentication”做同样的事情,但结合起来就可以了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-18
  • 2012-09-11
  • 1970-01-01
  • 2012-08-31
  • 2012-06-10
  • 2012-04-22
相关资源
最近更新 更多