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.