3

我有一个非常简单的 ASP.NET Core API。我正在向该服务发送标头,它运行良好。

但问题是,当我在请求标头中发送诸如“á”之类的字符时,请求失败并显示400: Bad request.

我知道这不是客户端的问题——我针对 Java API 测试了相同的代码并且它有效。我也用 Postman 重现了同样的问题。

如何告诉服务器在请求标头中接受 UTF-8?

[HttpPut("/api/Test")]
public IActionResult test([FromHeader(Name = "Word")] String word)
{
  return Ok("I accepted your request");
}

邮差截图

编辑:

它适用于 3.1,所以现在我们知道这与 2.1 相关。

4

1 回答 1

3

这是 .net core 2.1 的限制,并且已在 .net core 2.2 中修复。

在此 github 问题中有关于此行为的更多信息Configure header parsing to allow non-compliant headers

我可以看到以下解决方案来解决此问题:

  • 迁移到 .net core 2.2 或更高版本
  • 来自客户端的 URL 编码标头
  • 使用反向代理在标头到达 ASP.net 应用程序之前对其进行编码
于 2020-04-05T19:11:38.787 回答