我可以从 Web API 访问 IIdentity 吗?
本文关键字:IIdentity 访问 API Web 我可以 | 更新日期: 2023-09-27 18:28:25
我正在向现有的MVC应用程序添加一些Web API服务。 我有一个用于 MVC 控制器的模型绑定器,用于获取存储在自定义标识中的用户对象。 我正在尝试为我的 Web API 操作重现这一点。
在 MVC 控制器或其粘合剂中,我可以使用
controllerContext.HttpContext.User.Identity
ApiController 没有 HttpContext 对象。 是否有办法从 Web API 访问 IIdentity 对象?
他们在MVC 4 RC中删除了 ASP.NET GetUserPrincipal。但是,似乎 ApiController 属性用户已替换了以下内容:http://msdn.microsoft.com/en-us/library/system.web.http.apicontroller.user
是的,你可以。 ApiController
具有类型 System.Net.Http.HttpRequestMessage
的Request
属性;这自然地保存了有关当前请求的详细信息(它还具有用于单元测试目的的 setter(。 HttpRequestMessage
有一本Properties
字典;您将找到保存IPrincipal
对象的键的值MS_UserPrincipal
。
在研究这个答案时,我遇到了System.Web.Http.HttpRequestMessageExtensions
,它有一个GetUserPrincipal(this HttpRequestMessage request)
扩展方法来访问这个字典值;我以前没有见过这种扩展方法,并且直接访问Request.Properties["MS_UserPrincipal"]
,但这可能是更好的方法(不太依赖于 ASP.NET Web API 团队保持密钥名称相同......
您可以尝试从 System.ServiceModel 使用此扩展方法.dll:
public static IPrincipal GetUserPrincipal(this HttpRequestMessage request);
如:
IPrincipal principal = request.GetUserPrincipal();
IIdentity identity = principal.Identity;
我遇到了同样的问题,我找到了这种方式。在您的 API 控制器中,您可以使用
base.ControllerContext.RequestContext.Principal.Identity.;