在迁移到ASP.NET Core 2.1后,我们意识到一些API的消费者发送带有“Content-Type”头设置为“application/json”的GET请求。遗憾的是,过去这些请求没有被拒绝(尽管应该),尽管如此,这仍然是一个破坏性的变化。
由于我们的消费者需要在他们的端口修复此问题,这将需要一些时间,因此我们希望暂时接受这些请求,以便不会被困在等待中。
框架(正确地)拒绝以下错误消息的请求:“需要一个非空请求正文。”
操作如下:
在错误已经发生之前,由于请求不正确,在action内部的代码无法被执行。@Nkosi的解决方案导致相同的响应。
消费者使用的 (PHP) cURL 如下:
由于我们的消费者需要在他们的端口修复此问题,这将需要一些时间,因此我们希望暂时接受这些请求,以便不会被困在等待中。
框架(正确地)拒绝以下错误消息的请求:“需要一个非空请求正文。”
操作如下:
[Route("api/file/{id:guid}")]
public async Task<IActionResult> Get(Guid id)
{
// Some simple code here
}
在错误已经发生之前,由于请求不正确,在action内部的代码无法被执行。@Nkosi的解决方案导致相同的响应。
[HttpGet("api/file/{id:guid}")]
public async Task<IActionResult> Get([FromRoute]Guid id)
{
// Some simple code here
}
消费者使用的 (PHP) cURL 如下:
$ch = curl_init(self::API_URL."/file/".$id);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Content-Type: application/json",
"Application: APPKey ".$this->AppKey,
"Authorization: APIKey ".$this->ApiKey
));
移除"Content-Type: application/json",
这一行将请求转换为有效请求,因此我们99.9%确定添加此标头是罪魁祸首。