Получите текущего пользователя в действии ApiController, не передавая идентификатор пользователя в качестве параметра
Как мы получаем текущего пользователя в рамках безопасного действия ApiController, не передавая имя пользователя или идентификатор пользователя в качестве параметра?
мы предполагаем, что это доступно, потому что мы находимся в безопасной действий. Быть в безопасном действии означает, что пользователь уже прошел проверку подлинности и запрос имеет свой токен носителя. Учитывая, что WebApi авторизовал пользователя, может быть встроенный способ доступа к userId, без необходимости передавать его в качестве параметра действия.
8 ответов:
вы также можете получить доступ к основные использовать
User
собственности наApiController
.таким образом, следующие два утверждения в основном одинаковы:
string id; id = User.Identity.GetUserId(); id = RequestContext.Principal.Identity.GetUserId();
подсказка лежит в Webapi2 авто сгенерированный контроллер учетной записи
это свойство с геттером определена как
public string UserIdentity { get { var user = UserManager.FindByName(User.Identity.Name); return user;//user.Email } }
и для того, чтобы получить UserManager-в WebApi2-do as Romans (читать как AccountController) do
public ApplicationUserManager UserManager { get { return HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>(); } }
Это должно быть совместимо в IIS и self host mode
ответ Карана Бхандари хорош, но AccountController, добавленный в проект, очень вероятно a
Mvc.Controller
. Чтобы преобразовать его ответ для использования в изменении ApiControllerHttpContext.Current.GetOwinContext()
доRequest.GetOwinContext()
и убедитесь, что вы добавили следующий 2using
отчетность:using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.Owin;
Если вы используете Asp.Identity UseManager, он автоматически устанавливает значение
RequestContext.Главный.Тождественность.GetUserId()
на основе IdentityUser вы используете в создании IdentityDbContext.
Если когда-либо вы реализуете пользовательскую таблицу пользователей и аутентификацию носителя токена owin, пожалуйста, проверьте мой ответ.
как получить пользовательский контекст во время веб-Api звонки?
надеюсь, что это все-таки помогает. :)
ни одно из предложений выше не работало для меня. Следующее сделал!
HttpContext.Current.Request.LogonUserIdentity.Name
Я думаю, что есть большое разнообразие сценариев, и это сработало для меня. Мой сценарий включал в себя интерфейс AngularJS и серверное приложение Web API 2, работающее под управлением IIS. Я должен был установить и приложения для запуска исключительно при проверке подлинности Windows.
нет необходимости передавать информацию о пользователе. Браузер и IIS обмениваются зарегистрированным пользователем учетные данные и веб-API имеет доступ к учетным данным пользователя по требованию (из IIS, я полагаю).
string userName; string userId; if (HttpContext.Current != null && HttpContext.Current.User != null && HttpContext.Current.User.Identity.Name != null) { userName = HttpContext.Current.User.Identity.Name; userId = HttpContext.Current.User.Identity.GetUserId(); }
или на основе комментария Даррела Миллера, возможно, используйте это, чтобы сначала получить HttpContext.
// get httpContext object httpContext; actionContext.Request.Properties.TryGetValue("MS_HttpContext", out httpContext);
Читайте также:
как получить доступ к HTTPContext из вашего действия веб-API