使用授权属性时出现NullReferenceException
我在HomeController
上有[Authorize]
属性,每当我尝试访问它时,它都会抛出NullReferenceException
这真的有点奇怪,因为我以前多次使用[Authorize]
并且它工作得很好。 在这种情况下,唯一的区别是此应用程序使用Windows 7和IIS 7.5托管在我们自己的Web服务器上
这是Stack Trace:
[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`1filter,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 step,Boolean&completedSynchronously)+371
编辑:
在查看AuthorizeCore
方法的代码时,似乎AuthorizeCore
抛出了NullReferenceException
因为它获取了一个NULL HttpContextBase
。
有可能吗? 因为应用程序中的其他所有工作都很好,比如访问数据库,创建auth cookie等。
编辑2:
只有在将其发布到Web Server后才会发生这种情况。 在开发过程中,它在Visual Studio中运行得非常好。
问题更糟糕HttpContext
甚至在Controller和Razor视图中都没有。 所以,我使用aspnet_regiis -ir
重新安装ASP.NET v4.0。 然后使用在注册期间创建的ASP.NET 4.0
池而不是使用DefaultAppPool
。
它开始工作正常 。 它还解决了我在我的应用程序web.config中覆盖
另一个问题。
在我的例子中,我在一个global.asax
应用程序事件中将HttpContext.Current.User
设置为null。 当我让User
属性不变时,错误就消失了。
您可能需要确保您的站点使用的应用程序池具有托管管道模式=经典。