gpt4 book ai didi

asp.net-web-api - 如何在 Web Api 调用期间获取用户上下文?

转载 作者:行者123 更新时间:2023-12-03 20:25:02 25 4
gpt4 key购买 nike

我有一个 Web 前端调用 ASP Web Api 2 后端。身份验证是通过 ASP 身份管理的。对于我正在创建的某些 Controller ,我需要知道进行调用的用户。我不想创建一些奇怪的模型来传递包括用户的身份(我什至不存储在客户端中)。

所有对 API 的调用都使用不记名 token 授权,我认为 Controller 应该能够基于此确定用户上下文,但我不知道如何实现。我已经搜索过,但我不知道我在搜索什么,也没有找到任何相关的内容。我要去像...

public async Task<IHttpActionResult> Post(ApplicationIdentity identity, WalkthroughModel data)

更新

我发现下面看起来非常有希望......但该值始终为空!我的 Controller 继承自 ApiController 并有一个 Authorize header 。
var userid = User.Identity.GetUserId();

更新 2

我也尝试了 Get the current user, within an ApiController action, without passing the userID as a parameter 中的所有解决方案但没有工作。无论我得到一个有效且经过身份验证的身份,但用户 ID 为空

更新 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();
}

testa = Name: ClaimsIdentity,
testb = null,
testc = Bearer,
testd = true


用户显然已通过身份验证,但我无法检索他们的用户 ID。

更新 4

我找到了答案,但我真的很不满意......
ClaimsIdentity identity = (ClaimsIdentity)User.Identity;
string username = identity.Claims.First().Value;

这让我在没有任何 db 调用的情况下获得了用户名,但它似乎非常笨拙,并且将来支持它很痛苦。如果有人有更好的答案,我会很高兴。

如果我需要更改以后发出的 claim 怎么办?另外,任何时候我实际上需要用户的 id 我都必须进行 db 调用以将用户名转换为 ID

最佳答案

一种常见的方法是为您的 ApiControllers 创建一个基类,并利用 ApplicationUserManager 来检索您需要的信息。使用这种方法,您可以将访问用户信息的逻辑保留在一个位置,并在您的 Controller 中重复使用。

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-web-api - 如何在 Web Api 调用期间获取用户上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28657852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com