我可以从Web API访问IIdentity吗?
我将一些Web API服务添加到现有的MVC应用程序中。 我有我的MVC控制器模型联编程序来获取用户对象存储在一个CustomIdentity。 我试图重现这个我的Web API操作。
在MVC控制器或其绑定我可以使用
controllerContext.HttpContext.User.Identity
ApiController没有HttpContext对象。 有没有办法从Web API访问IIdentity对象?
他们删除了ASP.NET MVC 4 RC中的GetUserPrincipal。 但是,似乎ApiController属性用户已经取代了这个: http : //msdn.microsoft.com/en-us/library/system.web.http.apicontroller.user
是的你可以。 ApiController
有一个System.Net.Http.HttpRequestMessage
types的Request
属性; 这自然保存了关于当前请求的细节(它也有一个用于unit testing的setter)。 HttpRequestMessage
有一个Properties
字典; 你会发现MS_UserPrincipal
键的值包含你的IPrincipal
对象。
在研究这个答案时,我遇到了System.Web.Http.HttpRequestMessageExtensions
,它有一个访问这个字典值的GetUserPrincipal(this HttpRequestMessage request)
扩展方法; 我之前没有看到过这个扩展方法,并直接访问Request.Properties["MS_UserPrincipal"]
,但这可能是一个更好的方法(更less依赖于ASP.NET Web Api团队保持键的名称相同.. 。)
您可以尝试从System.ServiceModel.dll中使用此扩展方法 :
public static IPrincipal GetUserPrincipal(this HttpRequestMessage request);
如:
IPrincipal principal = request.GetUserPrincipal(); IIdentity identity = principal.Identity;
我有同样的问题,我发现这种方式。 在你的ApiController中,你可以使用
base.ControllerContext.RequestContext.Principal.Identity.;