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

У меня есть атрибут [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 controllerContext, String784976Name) + > 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.HttpAppli cation.ExecuteStep (шаг IExecutionStep, логический и завершенный синхронно) +371

Изменить:

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

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

Изменить 2:

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


person Charandeep Singh    schedule 23.08.2011    source источник
comment
Я получил это исключение из-за недопустимого файла cookie. Если вы тоже столкнулись с этим, попробуйте открыть инструменты разработчика в своем браузере, перейдите на вкладку «Ресурсы» или аналогичную и удалите все файлы cookie, связанные с сайтом. Когда вы перезагрузите страницу, это может сработать. :-)   -  person Patrick    schedule 16.04.2015


Ответы (3)


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

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

person Charandeep Singh    schedule 26.08.2011

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

person Martin Staufcik    schedule 20.08.2016
comment
Я делал то же самое. Спасибо. - person Carter Medlin; 24.05.2017

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

person Strillo    schedule 23.08.2011
comment
Да, я использую DefaultAppPool, который представляет собой .NET 4, Integrated Pipeline, и использую Identity LocalSystem (для доступа к SQL Server) - person Charandeep Singh; 23.08.2011
comment
Похоже, проблема в том, что httpContext имеет значение null. Попробуйте вместо этого использовать Classic .NET AppPool. См. msdn.microsoft.com/en-us/library/bb515251.aspx # CLASSIC, чтобы получить более подробную информацию. - person Strillo; 23.08.2011
comment
После изменения его на классический пул приложений он показывает, что DirectoryListingModule Disabled Error, поскольку его MVC. - person Charandeep Singh; 23.08.2011
comment
Как ты это исправил ?! У меня такая же проблема ?! Действительно странно! - person Tim; 26.08.2011
comment
@Charandeep: У меня была та же проблема, что и у вас, но, наконец, я решил ее. Что для меня значило, так это то, что эта строка отсутствовала в файле web.config: ‹modules runAllManagedModulesForAllRequests = true› См. Мою ветку по этому stackoverflow.com/questions/7167251/ - person Tim; 26.08.2011
comment
Да, у меня тоже есть <modules runAllManagedModulesForAllRequests="true" />, но в applicationHost.config используется <location>, потому что я не смог переопределить его в своем приложении web.config. Я тоже наткнулся на это решение, но у меня не сработало. Затем я увидел этот stackoverflow.com / questions / 2374957 / asp-net-mvc-on-iis-7-5 и переустановите ASP.NET (на этот раз я устанавливаю его из каталога Framework64, потому что это 64-битная машина) и он начал работать. - person Charandeep Singh; 27.08.2011