Как я могу получить текущий идентификатор пользователя с помощью IHttpContextAccessor? - PullRequest
0 голосов
/ 16 июня 2020

Я сейчас использую. NET Core, и я пытаюсь получить текущий идентификатор пользователя. Я понимаю, что System.Web недоступен в NET Core, поэтому я попытался использовать IHttpContextAccessor.

Я также добавил это в свой Startup.cs: service.AddHttpContextAccessor()

Затем я попытался найти идентификатор пользователя, выполнив это в своем контроллере:

public Controller(IHttpContextAccessor httpContextAccessor){
     var userId = httpContextAccessor.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier)
}

Но всегда возвращает null, кто-нибудь знает почему и может посоветовать? Я также отключил anonymousAuthentication и установил windowsAuthentication в значение true.

Edit

Единственные изменения, которые я внес в свой Startup.cs, - это ConfigureServices метод.

public void ConfigureServices(IServiceCollection services)
{
   services.AddControllersWithViews();
   services.AddAuthentication(IISDefaults.AuthenticationScheme);
   services.AddHttpContextAccessor();
}

1 Ответ

0 голосов
/ 16 июня 2020

Вы уверены, что вам нужно IHttpContextAccessor?

На самом деле есть лучший способ получить Id из претензий:

Вы можете использовать свойство ControllerBase.User, но сначала сделайте убедитесь, что ваш контроллер является производным от Controller или ControllerBase (последний без поддержки представлений).

ControllerBase.User property

public class YourController : Controller
    {
    ...

    var id = User.FindFirstValue(ClaimTypes.NameIdentifier)

    ...   
    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...