Получение имени пользователя в приложении интрасети 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 в коде контроллеров, чтобы идентифицировать пользователя, а не полагаться на его получение в качестве параметра.