C# 使用Authorize属性时出现NullReferenceException

C# 使用Authorize属性时出现NullReferenceException,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,我在HomeController上有[Authorize]属性,每当我试图访问它时,它都会抛出NullReferenceException 这真的有点奇怪,因为我以前使用过很多次[Authorize],效果很好。这种情况下唯一的区别是,此应用程序使用Windows 7和IIS 7.5托管在我们自己的Web服务器上 下面是堆栈跟踪: [NullReferenceException:对象引用未设置为 对象。] System.Web.Mvc.AuthorizeAttribute.AuthorizeCo

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

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

下面是堆栈跟踪:

[NullReferenceException:对象引用未设置为 对象。]
System.Web.Mvc.AuthorizeAttribute.AuthorizeCore(HttpContextBase httpContext)+38
System.Web.Mvc.AuthorizationAttribute.OnAuthorization(AuthorizationContext 过滤器上下文)+160
System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters(ControllerContext controllerContext、IList`1筛选器、ActionDescriptor(ActionDescriptor) +155
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext,字符串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
,因为它得到一个NULL
HttpContextBase

可能吗?因为应用程序中的其他一切都正常工作,比如访问数据库、创建身份验证cookie等等

编辑2:


只有在发布到Web服务器后才会发生这种情况。在开发过程中,它在Visual Studio中运行得非常好。

您可能需要确保站点使用的应用程序池具有Managed Pipeline Mode=Classic。

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


它开始工作得很好。它还解决了我在应用程序web.config中重写
的另一个问题。

在我的例子中,我在一个
global.asax
应用程序事件中将
HttpContext.Current.User
设置为null。当我让
User
属性保持不变时,错误消失了。

是的,我使用的是DefaultAppPool,即.NET 4,集成管道,并且使用Identity LocalSystem(访问SQL Server)看起来问题在于httpContext为null。尝试改用经典的.NET应用程序池。有关更多详细信息,请参阅。将其更改为经典应用程序池后,它显示DirectoryListingModule已禁用错误,因为它是MVC。您是如何修复此错误的?!我也有同样的问题?!真奇怪@查兰德普:我和你有同样的问题,但最终还是解决了。这对我来说是因为web.config中缺少这一行:请查看我在这篇文章中的线程。我得到这个异常是因为一个无效的cookie。如果您也遇到这种情况,请尝试在浏览器中打开开发人员工具,转到“资源”选项卡或类似选项卡,并删除与站点相关的所有cookie。重新加载页面时,它可能会工作。:-)我也在做同样的事情。非常感谢。