【问题标题】:ASP .NET Core Endpoint returns different Content TypesASP .NET Core Endpoint 返回不同的内容类型
【发布时间】:2021-06-16 03:21:06
【问题描述】:

在测试我的端点时,我发现端点在发送不同的输入值时返回了不同的内容类型。 例如:当给定 ID 时,端点返回一个供应商。如果 HTTP 状态代码为 200,则内容类型为“application/json; charset=utf-8; v=1.0”。 但是当我像随机字符串而不是整数一样提交废话时,显然 api 返回 HTTP 400。内容类型现在是“application/json; charset=utf-8”。缺少“v=1.0”。 这似乎微不足道,但我们的集成测试会检查 Content Type 是否与预期的 application/json; charset=utf-8; v=1.0 一样。

另外,我们在Startup.cs中定义了:options.DefaultApiVersion = new ApiVersion(1, 0);

端点代码:

[HttpGet("{id:int}")]
public async Task<IActionResult> GetById(int id)
{
    var body = await _lieferantenService.GetById(id);
    return Ok(body);
}

有人遇到过这种问题吗?

【问题讨论】:

  • 您正在使用 api 版本控制。现在我们有一个我们无法读取的请求,因此在它到达您的 api 之前有一个 400 响应。也就是说,当时根本没有可用的版本,因此不可能返回一个。
  • @ChristophLütjen 所以基本上你的意思是,我无法检查我测试失败案例的内容类型,因为那时 API 版本不可用。
  • @ChristophLütjen 在那种情况下,我希望 404 Not found。不是 400 错误请求
  • 好吧,我放弃了 - 似乎很久以前我就开始使用 api 版本控制了。
  • 您的回复似乎需要在内容类型中包含v=1.0 后缀?问题是它(或哪个代码)附加了v=1.0?这当然不是 asp.net core 框架。如果您发现负责附加该v=1.0 的代码,则该代码可能有一些错误某些其他代码会在某处覆盖响应内容类型(稍后在管道中)

标签: c# .net asp.net-core asp.net-core-webapi


【解决方案1】:

响应很可能来自中间件,而不是来自您的代码。

我认为是验证输入的中间件或负责模型绑定的中间件。 (将废话映射到整数)。

要自定义响应,请使用 InvalidModelStateResponseFactoryApiBehaviorOptions

查看此问题的答案。 https://stackoverflow.com/a/51442067/83039.

【讨论】:

  • 这似乎是合理的......我们在中间件中配置了很多东西(或我们自己开发的)。
猜你喜欢
  • 2020-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
  • 2011-10-06
  • 2016-02-21
相关资源
最近更新 更多