2016-03-04 4 views
0

У меня есть сайт, представляющий собой сочетание MVC и WebForms, использующих проверку подлинности форм. Недавно возникла необходимость перейти от использования WebForms для обработки аутентификации в MVC, поэтому я создал контроллер учетной записи с методом Login и создал соответствующее представление. Если кто-то уже заверены и пытался посетить «счета/логин», я хотел, чтобы быть перенаправлены на страницу индекса контроллера, так что я следующее, если заявление в верхней части действия:Контроллер Пользовательский объект null на сервере IIS

if(User.Identity.IsAuthenticated) 

Там никаких проблем с этим заявлением на моей машине разработки; однако, когда я развертываю это на сервере, объект User всегда имеет значение null. Я искал в stackoverflow и остальной части Интернета и еще не нашел ничего, что разрешило проблему.

Следует упомянуть, что сервер, на котором выполняется эта операция, - это Windows Server 2008 Standard, работающий под управлением IIS7.

У кого-нибудь есть идеи по поводу того, почему объект User всегда равен нулю? Я видел сообщение stackoverflow, в котором упоминалось, что это связано с тем, как IIS обрабатывает маршруты без расширения; однако, когда я попытался установить KB, упомянутый в этом сообщении, он сказал, что KB не относится к моему серверу.

+0

Выполняете ли вы какие-либо преобразования на своем web.config? Вы сделали разницу между файлами и конфигурациями производства? –

+0

Я сравнивал свои разработки и настройки конфигурационных файлов, и большинство различий между файлами связаны с привязкой к связанным отношениям или связанной с конечной точкой - я не видел ничего, что могло бы повлиять на меня как на ответственную проблему. –

ответ

0

Хорошо - я, наконец, выяснил проблему.

Я нашел здесь сообщение (http://forums.asp.net/t/1689878.aspx?HttpContext+Current+User+always+null+on+IIS+), в котором говорилось, что проблема была в том, что у них не было runAllManagedModulesForAllRequests, установленного в true. Я не хочу, чтобы это было правдой, поэтому я сделал немного больше поиска и наткнулся на эту публикацию stackoverflow: <modules runAllManagedModulesForAllRequests="true" /> Meaning

Я проверил свою запись в файле applicationHost.config и обнаружил, что у нее есть предварительное условие «managedHandler». Как только я убрал это предварительное условие, все началось, как и ожидалось. Странно то, что в моей среде разработки было предусловие, но оно работало без проблем. Возможно, это связано с тем, что в моем ядре dev используется IIS 7.5, в то время как сервер использует IIS 7.0.