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 – 保持viewdata在RedirectToAction
- 如何在asp.net应用程序中找到i / o瓶颈
- ef-code-first – 如何使用LocalDB和EF,而不使用迁移
- asp.net-mvc-4 – 为什么MVC4 @ Styles.Render()在调试模式
- asp.net – 如何更改FileUpload控件(System.Web.UI.WebCont
- asp.net – 如何在WebAPI中获取POST数据?
- ASP.NET Web Api在返回404时返回200 OK
- asp.net – 如何防止网页上的CSS缓存?
- asp.net-mvc – 如何在ASP.NET MVC中执行[RequireHttps(Red
- asp.net-mvc – Knockout JS发送到MVC 3
- asp.net – 配置节“system.servicemodel”无法读
- asp.net-mvc – mvc创建我自己的html帮助器,如何
- asp.net – 从1.7到1.9的迷你探查器升级破坏了现
- asp.net-mvc – 任何潜在的安全风险设置,打开rel
- asp.net-mvc – 在ASP.NET MVC中获取当前操作/控
- asp.net-mvc – 将HTML.EditorFor转换为下拉列表
- ASP.Net MVC中长时间运行服务器调用的进度条
- asp.net-mvc-3 – 如何配置DbContext以使用Oracl
- 在asp.net mvc中可以做一个通用的控制器吗?
- ASP.NET AJAX工具包 – CalendarExtender在Postb
