NullReferenceException при использовании атрибута авторизации

Я на HomeController, всякий раз, когда я пытаюсь получить к нему доступ, он бросает NullReferenceException

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

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

[исключение NullReferenceException: ссылка на объект не указывает на экземпляр объект.]
Система.Сеть.В MVC.Атрибутом authorizeattribute.AuthorizeCore (HttpContextBase свойство HttpContext) +38
Система.Сеть.В MVC.Атрибутом authorizeattribute.OnAuthorization (AuthorizationContext filterContext) +160
Система.Сеть.В MVC.ControllerActionInvoker.InvokeAuthorizationFilters (ControllerContext controllerContext, IList ' 1 фильтры, ActionDescriptor actionDescriptor) +155
Система.Сеть.В MVC.ControllerActionInvoker.InvokeAction (ControllerContext controllerContext, строку actionName) +784976
Система.Сеть.В MVC.Контроллер.ExecuteCore () +159
Система.Сеть.В MVC.ControllerBase.Выполнить(объекта RequestContext RequestContext-а) Система +335.Сеть.В MVC.когдаDisplayClassb.б_5() +62
Система.Сеть.В MVC.Асинхронный.когдаDisplayClass1.б_0() +20
Система.Сеть.В MVC.когдаDisplayClasse.б_d() +54
Система.Сеть.CallHandlerExecutionStep.Система.Сеть.Класса HttpApplication.IExecutionStep.Выполнять() +453 Система.Сеть.Класса HttpApplication.ExecuteStep (шаг IExecutionStep, Boolean & completedSynchronously) +371

Edit:

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

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

изменить 2:

это произошло только после публикации на веб-сервере. При разработке он отлично работает с Visual Studio.

3 ответов


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

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


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


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