Я работаю над приложением 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
Я уверен, что легко понять, что я уже сейчас. Может быть, я пропустил что-то очевидное. Если это так, пожалуйста, укажите это или сообщите мне о простом решении заблаговременно.