我正在为一个现有的MVC应用程序添加一些Web API服务。我为我的MVC控制器编写了一个模型绑定器,以获取存储在CustomIdentity中的用户对象。我正在尝试将其复制到我的Web API操作中。
在MVC控制器或其绑定器中,我可以使用
controllerContext.HttpContext.User.Identity
ApiController没有HttpContext对象。有没有办法从Web API访问IIdentity对象?
我正在为一个现有的MVC应用程序添加一些Web API服务。我为我的MVC控制器编写了一个模型绑定器,以获取存储在CustomIdentity中的用户对象。我正在尝试将其复制到我的Web API操作中。
在MVC控制器或其绑定器中,我可以使用
controllerContext.HttpContext.User.Identity
ApiController没有HttpContext对象。有没有办法从Web API访问IIdentity对象?
在ASP.NET MVC 4 RC中,他们移除了GetUserPrincipal。然而,似乎ApiController属性User已经替代了它:http://msdn.microsoft.com/en-us/library/system.web.http.apicontroller.user
可以。 ApiController
有一个类型为 System.Net.Http.HttpRequestMessage
的 Request
属性;它自然地保存了当前请求的详细信息 (对于单元测试也有 setter)。 HttpRequestMessage
有一个 Properties
字典;你会发现键 MS_UserPrincipal
的值保存了你的 IPrincipal
对象。
在研究这个答案时,我发现了 System.Web.Http.HttpRequestMessageExtensions
,它有一个 GetUserPrincipal(this HttpRequestMessage request)
扩展方法,用来访问这个字典值;我之前直接访问了 Request.Properties["MS_UserPrincipal"]
,但这可能是更好的方法(不再依赖于 ASP.NET Web Api 团队保持键名相同...)
public static IPrincipal GetUserPrincipal(this HttpRequestMessage request);
作为:
IPrincipal principal = request.GetUserPrincipal();
IIdentity identity = principal.Identity;
base.ControllerContext.RequestContext.Principal.Identity.;
IsAuthorized
方法中,如何访问控制器的属性之一——User? - MaverickAuthorizationAttribute.IsAuthorized
方法,你可以使用principal.Identity
。 - mhuprincipal
应该从哪里获取呢? - Maverick