Чтение cookie внутри HostedService - PullRequest
       8

Чтение cookie внутри HostedService

0 голосов
/ 11 октября 2019

Работа под ASP.net core 2.2 со страницей Razzor: я использую фоновые сервисы, использующие SingalR, и я хочу использовать токен (store in cookie) в этом фоновом сервисе. Я хочу получить свой HttpContext в фоновом сервисном классе. Как я могу его получить?

Мои попытки: Получить httpcontext из файла startup.cs (я не могу это сделать)

Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    services.AddSignalR();

    // context isnt defined
    var token = context.User.Claims.FirstOrDefault(c => c.Type == "API")?.Value;
    services.AddHostedService<MyBackgroundClass>(token);
}

Вторая попытка: получить httpcontext с помощью внедрения зависимости?

MyBackgroundClass.cs:

[Authorize]
public class MyBackgroundClass : BackgroundService
{
    private readonly IHubContext<BigScreenHub> _hub;
    private readonly List<WorkerInfo> WorkerInfos;
    public MyBackgroundClass(IHubContext<BigScreenHub> hub, IOptions<AppSettings> settings, ...)
    {
        _hub = hub;
        WorkerInfos = new WorkerInfoProvider(settings.Value.SomeStaticParam,"Need token here", settings.Value.ServicesUrl).WorkerInfos;
    }
}

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Вам следует избегать доступа к файлам cookie из HostedService, поскольку файлы cookie существуют только при наличии запроса, но для размещенной службы, которая работает постоянно, вы можете получить доступ к нулевому объекту, где нет запроса.

Для доступа к куки, вы можете попробовать IHttpContextAccessor как

    [Authorize]
    public class MyBackgroundClass : BackgroundService
    {
    private readonly IHubContext<BigScreenHub> _hub;
    private readonly List<WorkerInfo> WorkerInfos;
    private readonly HttpContext _httpContext;
    public MyBackgroundClass(IHubContext<BigScreenHub> hub, IOptions<AppSettings> settings, IHttpContextAccessor httpContextAccessor)
    {
            _httpContext = httpContextAccessor.HttpContext;
            _hub = hub;
            WorkerInfos = new WorkerInfoProvider(settings.Value.SomeStaticParam,"Need token here", settings.Value.ServicesUrl).WorkerInfos;
    }
    }
0 голосов
/ 11 октября 2019

Фоновая служба никак не связана с HttContext.

HttpContext существует только в контроллере при использовании веб-запроса и может быть предоставлен путем внедрения зависимости.

...