我可以从Web API访问IIdentity吗?

Mag*_*pie 49 c# asp.net-web-api

我正在向现有的MVC应用程序添加一些Web API服务.我有一个模型绑定器,用于我的MVC控制器,以获取存储在CustomIdentity中的用户对象.我正在尝试为我的Web API操作重现这一点.

在我可以使用的MVC控制器或其绑定器中

controllerContext.HttpContext.User.Identity
Run Code Online (Sandbox Code Playgroud)

ApiController没有HttpContext对象.无论如何从Web API访问IIdentity对象?

mhu*_*mhu 72

他们删除了ASP.NET MVC 4 RC中的GetUserPrincipal.然而,似乎ApiController属性用户已经取代了这个:http://msdn.microsoft.com/en-us/library/system.web.http.apicontroller.user


Jam*_*ter 30

是的你可以.ApiControllerRequest属性类型System.Net.Http.HttpRequestMessage; 这自然地保存了当前请求的详细信息(它还有一个用于单元测试目的的setter).HttpRequestMessage有一Properties本字典; 你会发现密钥的值MS_UserPrincipal保存你的IPrincipal对象.

在研究这个答案时,我遇到了System.Web.Http.HttpRequestMessageExtensions一个有一个GetUserPrincipal(this HttpRequestMessage request)访问这个字典值的扩展方法; 我之前没有看过这个扩展方法并且Request.Properties["MS_UserPrincipal"]直接访问,但这可能是一个更好的方法(更少依赖于ASP.NET Web Api团队保持密钥的名称相同......)