У меня есть веб-приложение ASP.NET MVC 5, запущенное в VS2012 на моем локальном Dev с IIS Express. Недавно я мигрировал с VS2012 на VS2015 с той же кодовой базой.
Чего я хочу достичь: Я хочу, чтобы мое приложение успешно работало в VS2015 и на моем сервере развертывания с IIS7
Мой текущий код:
Режим аутентификации : формы
Авторизация : разрешить анонимных пользователей
"Request.ServerVariables [" LOGON_USER "]" возвращает правильные данные пользователя
Но, когда я пытаюсь выполнить тот же код в VS2015 с IIS Express, Request.ServerVariables ["LOGON_USER"] возвращает пустую строку
Но тот же код отлично работает на моем сервере развертывания с IIS7
Мой оригинальный код в LoginController.cs
var userIdentity = new GenericIdentity(ControllerContext.HttpContext.Request.ServerVariables["LOGON_USER"]);
if (userIdentity.IsAuthenticated)
{
..............
}
Оригинальный код в Web.config
<authentication mode="Forms">
<forms loginUrl="~/Login/Login" timeout="2800"/>
</authentication>
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
Чтобы исправить эту проблему, я попробовал следующее
Попробуйте 1:
Изменил мой контроллер входа в систему с
var userIdentity = new GenericIdentity(ControllerContext.HttpContext.Request.ServerVariables["LOGON_USER"]);
до
var userIdentity = new GenericIdentity(ControllerContext.HttpContext.Request.LogonUserIdentity.Name)
И
Попробуйте 2:
var userIdentity = new GenericIdentity(System.Security.Principal.WindowsIdentity.GetCurrent().Name);
Результат:
userIdentity.IsAuthenticated возвращает true как для Try1, так и для try2
Оба отлично работают на локальном компьютере, но не работают, когда измененный код в LoginController.cs развернут на сервере (сервер IIS7).
Попробуйте 3:
В веб-приложении web.config отключен анонимный доступ.
<authorization>
<deny users = "?" /> <!-- This denies access to the Anonymous user -->
<allow users ="*" /> <!-- This allows access to all users -->
</authorization>
Но я сохранил код LoginController.cs такой же, как и в оригинальном
var userIdentity = new GenericIdentity(ControllerContext.HttpContext.Request.ServerVariables["LOGON_USER"]);
Результат:
Даже это не сработало. «Request.ServerVariables [« LOGON_USER »]» возвращает пустую строку
У меня появилась эта проблема, когда я переключил свою IDE с VS2012 на VS2015.
Что бы я ни пытался, он либо отлично работает на локальном VS2015 с IIS Express, либо на моем сервере развертывания.
Я хочу сделать исправление, которое заставит мою функцию входа в систему работать на моем локальном Dev Env с Vs2015, а также на сервере развертывания, чтобы все разработчики могли перейти на использование VS2015 для проекта.
Спасибо!