Могу ли я получить доступ к IIdentity из веб-API - PullRequest
49 голосов
/ 19 марта 2012

Я добавляю некоторые сервисы Web API в существующее приложение MVC.У меня есть связыватель модели для моих контроллеров MVC, чтобы пользовательский объект хранился в CustomIdentity.Я пытаюсь воспроизвести это для своих действий через веб-API.

В контроллере MVC или его подшивках я могу использовать

controllerContext.HttpContext.User.Identity

ApiController не имеет объекта HttpContext.Есть ли в любом случае доступ к объекту IIdentity из веб-API?

Ответы [ 4 ]

72 голосов
/ 08 июня 2012

Они удалили GetUserPrincipal в ASP.NET MVC 4 RC. Однако кажется, что свойство ApiController Пользователь заменило это: http://msdn.microsoft.com/en-us/library/system.web.http.apicontroller.user

30 голосов
/ 19 марта 2012

Да, вы можете. ApiController имеет свойство Request типа System.Net.Http.HttpRequestMessage; он содержит информацию о текущем запросе естественным образом (он также имеет установщик для целей модульного тестирования). HttpRequestMessage имеет Properties словарь; вы найдете значение ключа MS_UserPrincipal, в котором содержится ваш IPrincipal объект.

При изучении этого ответа я наткнулся на System.Web.Http.HttpRequestMessageExtensions, у которого есть метод расширения GetUserPrincipal(this HttpRequestMessage request), который обращается к этому значению словаря; Я не видел этот метод расширения раньше и получал прямой доступ к Request.Properties["MS_UserPrincipal"], но это может быть лучшим методом (менее зависимым от команды ASP.NET Web Api, сохраняющей имя ключа неизменным ...)

4 голосов
/ 24 ноября 2014

Вы можете попробовать использовать этот метод расширения из System.ServiceModel.dll:

public static IPrincipal GetUserPrincipal(this HttpRequestMessage request);

как:

IPrincipal principal = request.GetUserPrincipal();
IIdentity identity = principal.Identity;
2 голосов
/ 03 января 2016

У меня была такая же проблема, и я нашел этот путь.В вашем ApiController вы можете использовать
base.ControllerContext.RequestContext.Principal.Identity.;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...