我正在向现有的MVC应用程序添加一些Web API服务。我为我的MVC控制器提供了一个模型绑定器,用于获取存储在CustomIdentity中的用户对象。我正在尝试为我的Web API操作重现这一点。
在MVC控制器或它的绑定器中,我可以使用
controllerContext.HttpContext.User.IdentityApiController没有HttpContext对象。有没有办法从Web API访问IIdentity对象?
发布于 2012-06-08 20:10:40
他们删除了ASP.NET MVC4RC中的GetUserPrincipal。但是,ApiController属性User似乎已经替换了以下内容:http://msdn.microsoft.com/en-us/library/system.web.http.apicontroller.user
发布于 2012-03-19 20:10:24
是的你可以。ApiController有一个类型为System.Net.Http.HttpRequestMessage的Request属性;它自然地保存了当前请求的详细信息(它还有一个用于单元测试的设置器)。HttpRequestMessage有一个Properties字典;您将发现MS_UserPrincipal保存IPrincipal对象的键的值。
在研究这个答案的过程中,我遇到了System.Web.Http.HttpRequestMessageExtensions,它有一个GetUserPrincipal(this HttpRequestMessage request)扩展方法,可以访问这个字典值;我以前没有见过这个扩展方法,可以直接访问Request.Properties["MS_UserPrincipal"],但这可能是一个更好的方法(不太依赖于ASP.NET Web Api团队保持键的名称不变……)
发布于 2014-11-25 03:47:44
您可以尝试从System.ServiceModel.dll使用此extension method:
public static IPrincipal GetUserPrincipal(this HttpRequestMessage request);作为:
IPrincipal principal = request.GetUserPrincipal();
IIdentity identity = principal.Identity;https://stackoverflow.com/questions/9768872
复制相似问题