NullReferenceException при использовании атрибута Authorize - PullRequest
7 голосов
/ 23 августа 2011

У меня есть [Authorize] атрибут на HomeController, когда я пытаюсь получить к нему доступ, он выдает NullReferenceException

Это действительно странно, потому что я использовал [Authorize] многораз, и это работает просто отлично.Единственная разница в этом случае заключается в том, что это приложение размещено на нашем собственном веб-сервере с использованием Windows 7 и IIS 7.5

Вот трассировка стека:

[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 action4976, String).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 (IExynStion) + 371

Редактировать:

При просмотре кода метода AuthorizeCore кажется, что AuthorizeCore выбрасывает NullReferenceException, потому что он получаетa NULL HttpContextBase.

Возможно ли это?Поскольку все остальное в приложении работает просто отлично, например, доступ к базе данных, создание файла cookie авторизации и т. Д.

Редактирование 2:

Это происходит только послеопубликовать его на веб-сервере.Во время разработки он работает абсолютно отлично от Visual Studio.

Ответы [ 3 ]

4 голосов
/ 26 августа 2011

Проблема была еще хуже HttpContext даже не было доступно в представлениях Controller и Razor. Итак, я переустанавливаю ASP.NET v4.0, используя aspnet_regiis -ir. И затем использовал ASP.NET 4.0 пул, который был создан при регистрации, вместо использования DefaultAppPool.

И все началось работает нормально . Это также решает мою другую проблему переопределения <modules runAllManagedModulesForAllRequests="true"/> в моем приложении web.config.

1 голос
/ 20 августа 2016

В моем случае я установил для HttpContext.Current.User значение null в одном из global.asax событий приложения. Когда я оставил свойство User без изменений, ошибка исчезла.

0 голосов
/ 23 августа 2011

Возможно, вам нужно убедиться, что пул приложений, используемый вашим сайтом, имеет Managed Pipeline Mode = Classic.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...