consumir consume c# asp.net-web-api

consume - web api en c#



¿Puedo acceder a IIdentity desde la API web? (4)

Estoy agregando algunos servicios de API web a una aplicación MVC existente. Tengo una carpeta modelo para mis controladores MVC para obtener el objeto de usuario almacenado en CustomIdentity. Estoy intentando reproducir esto para mis acciones de API web.

En el controlador MVC o sus carpetas puedo usar

controllerContext.HttpContext.User.Identity

El ApiController no tiene el objeto HttpContext. ¿Hay alguna forma de acceder al objeto IIdentity desde la API web?


Puede intentar utilizar este método de extensión desde System.ServiceModel.dll:

public static IPrincipal GetUserPrincipal(this HttpRequestMessage request);

como:

IPrincipal principal = request.GetUserPrincipal(); IIdentity identity = principal.Identity;



Sí tu puedes. ApiController tiene una propiedad Request de tipo System.Net.Http.HttpRequestMessage ; esto contiene detalles sobre la solicitud actual de forma natural (también tiene un colocador para fines de pruebas unitarias). HttpRequestMessage tiene un diccionario de Properties ; encontrará que el valor de la clave MS_UserPrincipal contiene su objeto IPrincipal .

Al investigar esta respuesta, me encontré con System.Web.Http.HttpRequestMessageExtensions que tiene un método de extensión GetUserPrincipal(this HttpRequestMessage request) que accede a este valor del diccionario; No había visto este método de extensión antes y estaba accediendo a Request.Properties["MS_UserPrincipal"] directamente, pero este podría ser un método mejor (menos dependiente del equipo ASP.NET Web Api manteniendo el mismo nombre de la clave). .)


Tuve el mismo problema y lo encontré de esta manera. En tu ApiController puedes usar
base.ControllerContext.RequestContext.Principal.Identity.;