CancellationToken 在 asp.net 核心中不工作

CancellationToken not working in asp.net core

我正在使用 Asp.net Core API 并设置如下服务:

services
    .Configure<AppOptions>(_configuration.GetSection("app"))
    .AddMvcCore(options =>
        {
            options.RespectBrowserAcceptHeader = true;
            options.OutputFormatters.Add(new XmlSerializerOutputFormatter());
            options.InputFormatters.Add(new XmlSerializerInputFormatter(options));
        })
    .AddFormatterMappings()
    .AddJsonFormatters()
    .AddXmlSerializerFormatters()
    .AddCors();

之后,我创建了一个带有 CancellationToken 参数的 API,如下所示:

[HttpGet("list")]
public async Task<ActionResult<IEnumerable<string>>> Get(CancellationToken cancellationToken)
{
    var result = await _orderBusinessService.GetList(cancellationToken);

    return Ok(result);
}

当我从 Postman 或浏览器调用此 API 时,我得到以下响应:

415 Unsupported Media Type

当我添加[FromQuery]到cancellationToken时,就OK了。

实际上,这似乎 CancellationTokenModelBinder 不起作用。

不知道为什么? 有人有什么想法吗?

请检查您的 Startup class,并确保您设置了兼容版本:

services.AddMvcCore()
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
    .AddApiExplorer()
    .AddAuthorization();

添加一行就解决了我的问题。 (有关将我推向正确方向的评论,请参阅 https://github.com/microsoft/aspnet-api-versioning/issues/534#issuecomment-521680394)。

在我的例子中,我尝试使用构造函数注入而不是方法。从构造函数中删除它并将其作为参数添加到修复它的操作中。