asp.net 在启动时获取身份声明C# NET6

r1wp621o  于 2023-05-02  发布在  .NET
关注(0)|答案(1)|浏览(174)

我试图通过在应用程序的最开始的声明来获取登录的身份用户的名称。

程序中的代码。cs

app.UseAuthentication();
app.UseAuthorization();

var serviceProvider = app.Services;

using var scope = serviceProvider.CreateScope();

var httpContextAccessor = scope.ServiceProvider.GetRequiredService<IHttpContextAccessor>();

var user = httpContextAccessor.HttpContext.User;

结果:
对象引用未设置为对象的示例。
通过这一行调用:

var user = httpContextAccessor.HttpContext.User;

我的程序需要这个设置。我知道这可以通过使用控制器中的端点来完成,并且通过使用控制器对我有效,但这不是我所期望的。

总之,我需要它返回在程序开始时登录的IdentityUser的名称。cs谁有主意?(我不想使用控制器)

Additionaly我想得到这些索赔时,我的浏览器没有打开

yhived7q

yhived7q1#

它可以使用IAuthenticationService接口完成。

var authService = scope.ServiceProvider.GetRequiredService<IAuthenticationService>();
var result = await authService.AuthenticateAsync(httpContextAccessor.HttpContext, IdentityConstants.ApplicationScheme);

if (result?.Principal != null)
{
    var userName = result.Principal.Identity.Name;
    // Here goes your stuff
}

另一种方法是实现自定义IStartupFilter,但我认为这将比上述方法更复杂。

相关问题