Получение имени пользователя в приложении интрасети ASP.NET MVC3
Я работаю над приложением MVC 3 для интрасети (проверка подлинности Windows). Приложение должно отображать страницу профиля пользователя после входа пользователя в систему. Чтобы сделать это, имя пользователя зарегистрированного пользователя должно быть передано в качестве параметра маршрута по следующему маршруту в Global.asax.cs.
routes.MapRoute(
"Initial",
"{controller}/{action}/{emailAlias}", // URL with parameters
new { controller = "Home", action = "Home", userId = **<USERNAME>**}
);
Здесь я использовал несколько альтернатив.
-
Сначала я использовал Environment.Username
. Что хорошо работает в разработке. Но не после публикации. Потому что тогда Environment.Username
дает имя пула приложений, в котором работает приложение. Как описано здесь.
-
Controller.User.Identity.Name
используется для получения желаемого имени пользователя в контроллерах, хорошо работает при до и после публикации. Но он не может использоваться в контексте Global.asax.cs.
-
System.Web.HttpContext.Current.User.Identity.Name
дает нулевую ссылку.
-
System.Security.Principal.WindowsIdentity.GetCurrent().Name
работает так же, как Environment.Username
Я уверен, что легко понять, что я уже сейчас. Может быть, я пропустил что-то очевидное. Если это так, пожалуйста, укажите это или сообщите мне о простом решении заблаговременно.
Ответы
Ответ 1
Предполагается, что код global.asax запускается при запуске приложения (и завершении работы), и у вас нет сеанса или пользователя в то время (отсюда и название глобальное). Зачем вам нужно имя пользователя на маршруте? Вы должны просто использовать User.Identity.Name
в коде контроллеров, чтобы идентифицировать пользователя, а не полагаться на его получение в качестве параметра.