首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我可以从Web API访问IIdentity吗

我可以从Web API访问IIdentity吗
EN

Stack Overflow用户
提问于 2012-03-19 18:54:47
回答 4查看 43K关注 0票数 49

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

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

代码语言:javascript
运行
复制
controllerContext.HttpContext.User.Identity

ApiController没有HttpContext对象。有没有办法从Web API访问IIdentity对象?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-08 20:10:40

他们删除了ASP.NET MVC4RC中的GetUserPrincipal。但是,ApiController属性User似乎已经替换了以下内容:http://msdn.microsoft.com/en-us/library/system.web.http.apicontroller.user

票数 72
EN

Stack Overflow用户

发布于 2012-03-19 20:10:24

是的你可以。ApiController有一个类型为System.Net.Http.HttpRequestMessageRequest属性;它自然地保存了当前请求的详细信息(它还有一个用于单元测试的设置器)。HttpRequestMessage有一个Properties字典;您将发现MS_UserPrincipal保存IPrincipal对象的键的值。

在研究这个答案的过程中,我遇到了System.Web.Http.HttpRequestMessageExtensions,它有一个GetUserPrincipal(this HttpRequestMessage request)扩展方法,可以访问这个字典值;我以前没有见过这个扩展方法,可以直接访问Request.Properties["MS_UserPrincipal"],但这可能是一个更好的方法(不太依赖于ASP.NET Web Api团队保持键的名称不变……)

票数 30
EN

Stack Overflow用户

发布于 2014-11-25 03:47:44

您可以尝试从System.ServiceModel.dll使用此extension method

代码语言:javascript
运行
复制
public static IPrincipal GetUserPrincipal(this HttpRequestMessage request);

作为:

代码语言:javascript
运行
复制
IPrincipal principal = request.GetUserPrincipal();
IIdentity identity = principal.Identity;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9768872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档