Получение зарегистрированного имени пользователя в приложении интрасети ASP.NET MVC3 - PullRequest
10 голосов
/ 22 июля 2011

Я работаю над интранет-приложением MVC 3 (проверка подлинности Windows).Приложение должно отображать страницу профиля пользователя, как только пользователь входит в систему. Чтобы сделать это, имя пользователя вошедшего в систему пользователя должно быть передано в качестве параметра маршрута в следующем маршруте в Global.asax.cs.

routes.MapRoute(
    "Initial",
    "{controller}/{action}/{emailAlias}", // URL with parameters
    new { controller = "Home", action = "Home", userId = **<USERNAME>**}
);

Здесь я использовал несколько альтернатив.

  1. Сначала я использовал Environment.Username.Который хорошо работает в разработке.Но не после публикации.Потому что тогда Environment.Username возвращает имя пула приложений, в котором запускается приложение. Как описано здесь .

  2. Controller.User.Identity.Name используется для получения желаемого имени пользователя в контроллерах, хорошо работает до и после публикации.Но его нельзя использовать в контексте Global.asax.cs.

  3. System.Web.HttpContext.Current.User.Identity.Name возвращает нулевую ссылку.

  4. System.Security.Principal.WindowsIdentity.GetCurrent().Name работает примерно так же, как Environment.Username

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

1 Ответ

13 голосов
/ 22 июля 2011

Код global.asax должен запускаться при запуске (и завершении работы) приложения, и у вас нет ни сеанса, ни пользователя в это время (отсюда и название global ).Зачем вам нужно имя пользователя в маршруте?Вы должны просто использовать User.Identity.Name в коде контроллера для идентификации пользователя, а не полагаться на получение его в качестве параметра.

...