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)。
在我的例子中,我尝试使用构造函数注入而不是方法。从构造函数中删除它并将其作为参数添加到修复它的操作中。
我正在使用 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)。
在我的例子中,我尝试使用构造函数注入而不是方法。从构造函数中删除它并将其作为参数添加到修复它的操作中。