ActionFilterAttribute Identity.Name 中的 IHttpContextAccessor 为 Null
IHttpContextAccessor in ActionFilterAttribute Identity.Name is Null
我在 Api 控制器操作上设置了 AuthorizationFilter
,在第一次调用期间设置了用户身份,但在随后的 api 中访问 httpContextAccessor 时请求 User.Identity.Name 为空。
我尝试使用注入将 HttpContextAccessor 设置为单例。
授权过滤代码:
IIdentity identity = _singleSignOnUserService.GetUser(userInfo);
_httpContextAccessor.HttpContext.User = new GenericPrincipal(identity, null);
Startup.cs 注入代码:
services.AddScoped<AuthAttribute>();
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
控制器代码:
private readonly IHttpContextAccessor _httpContextAccessor;
TesController(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
为什么即使 AuthorizeFilter 已设置值,_httpContextAccessor.HttpContext.User.Identity.Name
仍为 null?
我通过在对 Webapi 的客户端请求的 header 中设置授权令牌解决了这个问题,结果发现问题是因为客户端应用程序 - Angular 和核心 Webapi 托管在不同的服务器上域。
我在 Api 控制器操作上设置了 AuthorizationFilter
,在第一次调用期间设置了用户身份,但在随后的 api 中访问 httpContextAccessor 时请求 User.Identity.Name 为空。
我尝试使用注入将 HttpContextAccessor 设置为单例。
授权过滤代码:
IIdentity identity = _singleSignOnUserService.GetUser(userInfo);
_httpContextAccessor.HttpContext.User = new GenericPrincipal(identity, null);
Startup.cs 注入代码:
services.AddScoped<AuthAttribute>();
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
控制器代码:
private readonly IHttpContextAccessor _httpContextAccessor;
TesController(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
为什么即使 AuthorizeFilter 已设置值,_httpContextAccessor.HttpContext.User.Identity.Name
仍为 null?
我通过在对 Webapi 的客户端请求的 header 中设置授权令牌解决了这个问题,结果发现问题是因为客户端应用程序 - Angular 和核心 Webapi 托管在不同的服务器上域。