Это хорошая практика для наследования от ControllerBase в webapi net core 2.2 - PullRequest
0 голосов
/ 23 февраля 2019

Я создаю webapi и хочу создать контроллер, который наследуется от класса ControllerBase.

Я делаю это, потому что мне нужно кое-что сделать перед вызовом действия, то есть проверить пользователязарегистрировать и использовать HttpContext.

public class BaseApiZrController : ControllerBase
{
    public BaseApiZrController(ApplicationDbContext db)
    {

        this.HandleAuthentication();

        //??? this.HttpContext is always null, how come?
        ClaimsPrincipal claimsPrincipal = this.HttpContext.User;

    }
    //...some code

 }

Это хорошая практика, или я должен делать все это в начальном классе через промежуточное ПО?

Другой вопрос при наследовании класса ControllerBaseв мой собственный класс BaseApiZrController я не могу получить доступ к httpContext, он всегда возвращает ноль, как получилось?

1 Ответ

0 голосов
/ 25 февраля 2019

В ядре asp.net, если мы создадим контроллер веб-API, он по умолчанию имеет ControllerBase.

Если вы хотите что-то сделать перед вызовом действия, вы можете использовать Фильтр действий или Фильтр авторизации .Ссылка на Реализация фильтров действий в ASP.NET Core .

HttpContext недоступна при вызове конструктора контроллера.См. Это post .

. Вы можете использовать вспомогательную службу IHttpContextAccessor для получения HTTP-контекста в любом классе, который управляется системой внедрения зависимостей ASP.NET Core.Это полезно, когда у вас есть общая служба, используемая вашими контроллерами.

private readonly IHttpContextAccessor _httpContextAccessor;
    public BaseApiZrController(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
        ClaimsPrincipal claimsPrincipal = _httpContextAccessor.HttpContext.User;
    }

В файле startup.cs:

public void ConfigureServices(IServiceCollection services)
{
   services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();

   // Other code...
}

См. Доступ к HttpContext в ASP.NET.ядро

...