C# 如何在ASP.NET Core 2中获取当前登录用户的用户名,而不是应用程序池详细信息

C# 如何在ASP.NET Core 2中获取当前登录用户的用户名,而不是应用程序池详细信息,c#,asp.net,asp.net-core,C#,Asp.net,Asp.net Core,我很感激这个问题在过去已经得到了回答,但我无法找到最新的答案 我通过以下方式获取用户的详细信息: string userName = UserPrincipal.Current.SamAccountName; 这在运行VS时有效。但是在服务器上,它返回应用程序池标识 那么我如何获得用户的详细信息呢 我正在使用ASP.NET Core 2.2和Razor页面 谢谢。用户名始终可通过以下方式使用: User.Identity.Name 您也可以从索赔中获得: User.FindFirstValu

我很感激这个问题在过去已经得到了回答,但我无法找到最新的答案

我通过以下方式获取用户的详细信息:

string userName = UserPrincipal.Current.SamAccountName;
这在运行VS时有效。但是在服务器上,它返回应用程序池标识

那么我如何获得用户的详细信息呢

我正在使用ASP.NET Core 2.2和Razor页面


谢谢。

用户名始终可通过以下方式使用:

User.Identity.Name
您也可以从索赔中获得:

User.FindFirstValue(ClaimTypes.Name)
如果您不在具有
User
属性(controller/view/page)的上下文中,则需要插入
IHttpContextAccessor

public class Foo
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public Foo(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

    ...
}
然后:

var username = _httpContextAccessor.HttpContext?.User.Identity.Name;

HttpContext
可能为空,这取决于您是否处于活动请求的上下文中,因此如果您取决于用户名,则需要通过空检查进行补偿。

用户名始终可通过以下方式使用:

User.Identity.Name
您也可以从索赔中获得:

User.FindFirstValue(ClaimTypes.Name)
如果您不在具有
User
属性(controller/view/page)的上下文中,则需要插入
IHttpContextAccessor

public class Foo
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public Foo(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

    ...
}
然后:

var username = _httpContextAccessor.HttpContext?.User.Identity.Name;

HttpContext
可能为空,这取决于您是否处于活动请求的上下文中,因此,如果您取决于用户名,则需要使用空检查来弥补这一点。

谢谢,您能详细说明一下吗?文档说,
用户
在核心2.2中不可用。什么?你在哪里看到的<代码>用户肯定在那里。过去是,而且可能永远是。无论如何,我知道它存在于Core2.2中。谢谢,我采取了稍微不同的方法,但它为我指明了正确的方向。原来我在文档中看到了错误的
HttpContext
。谢谢,你能详细说明一下吗?文档说,
用户
在核心2.2中不可用。什么?你在哪里看到的<代码>用户肯定在那里。过去是,而且可能永远是。无论如何,我知道它存在于Core2.2中。谢谢,我采取了稍微不同的方法,但它为我指明了正确的方向。原来我在文档中看到了错误的
HttpContext