Как получить CancellationToken из http-запроса на webApi? - PullRequest
0 голосов
/ 17 января 2019

Я отправляю запрос на сервер, как это через HttpClient:

public async Task GetTest()
{
    CancellationTokenSource tokenSource = new CancellationTokenSource();
    string url = String.Format($"api/Test/getTest");

    HttpResponseMessage response = await _httpClientFactory.HttpClient.GetAsync(url, tokenSource.Token).ConfigureAwait(false);

    response.EnsureSuccessStatusCode();
}

В WebApi (Core 2.1) метод выглядит следующим образом:

[HttpGet("getTest")]
public async Task<IActionResult> GetTest(CancellationToken token)
{
    try
    {
        object test = await _dataService.GetTest(token);

        return Ok(test);
    }
    catch (Exception ex)
    {
        this._logger.LogError(ExceptionHelper.ExMessageDeepGet(ex));
        return new InternalServerErrorWithMessageResult(ex);
    }
}

В _dataService.GetTest(token) Я token.ThrowIfCancellationRequested();

Проблема в том, что я получаю новый токен на webapi, а не тот, который отправляю через клиента, поэтому, если я остановлю запрос (завершу работу клиента) до ответа от API, исключение не выдается.

Есть предложения?

1 Ответ

0 голосов
/ 17 января 2019

Найденное средство ..

На самом деле нам не нужно передавать токен отмены через клиента, MVC делает это автоматически ..

MVC автоматически свяжет любые параметры CancellationToken в методе действия с токеном HttpContext.RequestAborted, используя CancellationTokenModelBinder. Эта модель привязки регистрируется автоматически при вызове services.AddMvc () (или services.AddMvcCore ()) в Startup.ConfigureServices ()

источник: andrewlock.net

...