gpt4 book ai didi

ASP.NET Web API 在 Controller 构造函数中获取用户身份

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

在 ASP.NET Web API Controller 构造函数中获取用户身份是个好主意,例如:

public PagesController(PageValidator pageValidator, PageMapper pageMapper, PagesManager pagesManager, UsersManager usersManager)
:base(usersManager)
{
_pageValidator = pageValidator;
_pageMapper = pageMapper;
_pagesManager = pagesManager;
if (User.Identity.IsAuthenticated)
_pagesManager.UserId = usersManager.GetByEmail(User.Identity.Name).Id;
}

在此调用引发之前,User.Identity 是否始终正确填充?

最佳答案

这已经咬了我好几次了。根据您执行身份验证的位置/方式,您需要小心访问身份的位置,特别是在 Controller 构造函数中。

例如,在IAuthenticationFilter之后调用 Controller 操作实例化后, Controller 的构造函数被调用before AuthenticateAsync ;意味着您在 AuthenticateAsync 中进行的任何身份验证在 Controller 的构造函数中不可用(如您的示例中)。

我通常不依赖 Controller 构建期间可用的东西(除非由 DI 处理)。相反,您可以根据需要在 Controller 操作中访问身份。

如果您希望使身份查找更容易(即根据 User.Identity.Name 属性拉入您的用户对象),请创建一个基本 Controller 类,该类具有为您执行此操作的属性或方法,然后让您的 Controller 继承自那...

public User AuthenticatedUser
{
get
{
if (User.Identity.IsAuthenticated)
{
return usersManager.GetByEmail(User.Identity.Name);
}

return null;
}
}

编辑

参见here有关 Web.API 生命周期的详分割解,显示在身份验证之前发生的 Controller 创建。

关于ASP.NET Web API 在 Controller 构造函数中获取用户身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36352752/

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