【问题标题】:NullReferenceException while using Authorize Attribute使用授权属性时出现 NullReferenceException
【发布时间】:2011-11-01 20:29:02
【问题描述】:

我在HomeController 上有[Authorize] 属性,每当我尝试访问它时,它都会抛出NullReferenceException

这真的有点奇怪,因为我以前用过[Authorize] 很多次,而且效果很好。在这种情况下,唯一的区别是此应用程序托管在 我们自己的使用 Windows 7 和 IIS 7.5 的 Web 服务器上

这是堆栈跟踪:

[NullReferenceException: 对象引用未设置为 对象。]
System.Web.Mvc.AuthorizeAttribute.AuthorizeCore(HttpContextBase httpContext) +38
System.Web.Mvc.AuthorizeAttribute.OnAuthorization(AuthorizationContext filterContext) +160
System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters(ControllerContext controllerContext、IList`1 过滤器、ActionDescriptor actionDescriptor) +155
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +784976
System.Web.Mvc.Controller.ExecuteCore() +159
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +335 System.Web.Mvc.c_DisplayClassb.b_5() +62
System.Web.Mvc.Async.c_DisplayClass1.b_0() +20
System.Web.Mvc.c_DisplayClasse.b_d() +54
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +453 System.Web.HttpApplication.ExecuteStep(IExecutionStep 步骤, 布尔和完成同步)+371

编辑:

在查看AuthorizeCore 方法的代码时,似乎AuthorizeCore 正在抛出NullReferenceException,因为它得到了一个N​​ULL HttpContextBase

这可能吗?因为应用程序中的其他一切都运行良好,例如访问数据库、创建身份验证 cookie 等。

编辑 2:

仅在发布到 Web 服务器后才会发生。在开发过程中,它在 Visual Studio 中运行良好。

【问题讨论】:

  • 我收到了这个异常,因为 cookie 无效。如果您也遇到这种情况,请尝试在浏览器中打开开发人员工具,转到“资源”选项卡或类似选项,然后删除与该站点相关的所有 cookie。当您重新加载页面时,它可能会起作用。 :-)

标签: c# asp.net-mvc-3


【解决方案1】:

就我而言,我在global.asax 应用程序事件之一中将HttpContext.Current.User 设置为null。当我让User 属性不变时,错误消失了。

【讨论】:

  • 我也在做同样的事情。谢谢。
【解决方案2】:

问题更严重HttpContext 甚至在 Controller 和 Razor 视图中都不可用。因此,我使用aspnet_regiis -ir 重新安装了 ASP.NET v4.0。然后使用注册期间创建的ASP.NET 4.0池,而不是使用DefaultAppPool

它开始工作正常。它还解决了我在应用程序 web.config 中覆盖 <modules runAllManagedModulesForAllRequests="true"/> 的另一个问题。

【讨论】:

    【解决方案3】:

    您可能需要确保您的站点使用的应用程序池具有托管管道模式 = 经典。

    【讨论】:

    • 是的,我正在使用 DefaultAppPool 这是 .NET 4、集成管道并使用 Identity LocalSystem(访问 SQL Server)
    • 看起来问题在于 httpContext 为空。尝试改用 Classic .NET AppPool。有关更多详细信息,请参阅msdn.microsoft.com/en-us/library/bb515251.aspx#CLASSIC
    • 改成Classic App Pool后显示DirectoryListingModule Disabled Error,因为它的MVC。
    • 你是怎么解决这个问题的?!我也有同样的问题?!真奇怪!
    • @Charandeep:我遇到了和你一样的问题,但最终解决了。它对我的影响是 web.config 中缺少这一行: 请在此 stackoverflow.com/questions/7167251/… 上查看我的线程
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多