【问题标题】:How to retrieve CancellationToken from http request on webApi?如何从 webApi 上的 http 请求中检索 CancellationToken?
【发布时间】:2019-01-17 09:41:35
【问题描述】:

我正在通过 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 响应之前停止请求(关闭客户端),则不会引发异常..

有什么建议吗?

【问题讨论】:

    标签: c# asp.net-core asp.net-core-webapi dotnet-httpclient asp.net-core-2.1


    【解决方案1】:

    找到解决方案..

    实际上我们不需要通过客户端传递取消令牌,MVC 会自动完成..

    MVC 将使用 CancellationTokenModelBinder 自动将操作方法​​中的任何 CancellationToken 参数绑定到 HttpContext.RequestAborted 令牌。当您在 Startup.ConfigureServices() 中调用 services.AddMvc()(或 services.AddMvcCore())时,会自动注册此模型绑定器

    来源:andrewlock.net

    【讨论】:

      猜你喜欢
      • 2012-08-05
      • 2014-11-26
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      相关资源
      最近更新 更多