asp.net-web-api – 如何在Web Api调用期间获取用户上下文?
我有一个Web前端调用ASP Web Api 2后端.身份验证通过ASP身份进行管理.对于我创建的一些控制器,我需要知道拨打电话的用户.我不想创建一些奇怪的模型来传递,包括用户的身份(我甚至不存储在客户端).
对API的所有调用都使用承载令牌进行授权,我的想法是控制器应该能够基于此确定用户上下文,但我不知道如何实现.我已经搜索,但我不知道我正在寻找什么,没有发现任何相关.我要去像… public async Task<IHttpActionResult> Post(ApplicationIdentity identity,WalkthroughModel data) 更新 我发现下面看起来非常有希望,但价值永远是空的!我的控制器继承自ApiController并具有Authorize头. var userid = User.Identity.GetUserId(); 更新2 我也尝试了所有的解决方案在Get the current user,within an ApiController action,without passing the userID as a parameter,但没有工作.无论我获得的身份是有效和auth’d,但是有一个空的UserID 更新3 这是我现在在哪里 [Authorize] [Route("Email")] public async Task<IHttpActionResult> Get() { var testa = User.Identity.GetType(); var testb = User.Identity.GetUserId(); var testc = User.Identity.AuthenticationType; var testd = User.Identity.IsAuthenticated; return Ok(); }
用户显然已通过身份验证,但无法检索其用户ID. 更新4 我找到一个答案,但我真的不开心… ClaimsIdentity identity = (ClaimsIdentity)User.Identity; string username = identity.Claims.First().Value; 这让我的用户名没有任何数据库调用,但它似乎非常janky,并支持将来的痛苦.如果有人有更好的答案,会爱上 如果我需要改变道路上发出的索赔怎么办?加上任何时候,我实际上需要用户的id,我必须进行一个数据库调用来将用户名转换为ID 解决方法
一个常见的方法是为您的ApiControllers创建一个基类,并利用ApplicationUserManager来检索所需的信息.通过这种方法,您可以保留在一个位置访问用户信息的逻辑,并在控制器中重用它们.
public class BaseApiController : ApiController { private ApplicationUser _member; public ApplicationUserManager UserManager { get { return HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>(); } } public string UserIdentityId { get { var user = UserManager.FindByName(User.Identity.Name); return user.Id; } } public ApplicationUser UserRecord { get { if (_member != null) { return _member ; } _member = UserManager.FindByEmail(Thread.CurrentPrincipal.Identity.Name); return _member ; } set { _member = value; } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET MVC 4实体框架6 SQL Compact Edition 4.0部署无需安
- asp.net – 将初始空行插入到选择列表MVC LINQ SQL中
- asp.net web-api – ASP.net Web API RESTful Web服务基本身
- entity-framework-6 – 带有EF6的ASP.NET-5
- asp.net – IIS7.5中x64进程的内存限制
- ASP.Net中上传文件的几种方法
- asp.net – 使用UpdatePanel的CollectionPager问题
- asp.net – Internet Explorer 9中的URL查询字符串值的UTF-
- asp.net-mvc – Asp.Net MVC3 RC Razor视图:在块内嵌入代码
- asp.net-mvc – 建立与SQL Server的连接时发生网络相关或特