【问题标题】:Sending a request in ASP.NET Core API 2.1 with a header with non-ASCII characters在 ASP.NET Core API 2.1 中发送带有非 ASCII 字符标头的请求
【发布时间】:2020-04-06 07:17:13
【问题描述】:

我有一个非常简单的 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 相关。

【问题讨论】:

  • 我认为目前不支持此功能:github.com/dotnet/aspnetcore/issues/4727
  • 抱歉,这是回复。我相信此更改支持标头:github.com/aspnet/KestrelHttpServer/pull/2867/files
  • @MartinCostello 那么,我该如何实现呢?
  • 仅供参考:由于@CyrilDurand 报告说这适用于 ASP.NET Core 3.0+,而@CarlosLópezMarí 报告说这是在 ASP.NET Core 2.1 上,我已经添加了 asp.net-core-2.1 标签到这个发布,因为它似乎可能是以前版本的 ASP.NET 的特定问题。 (不过,如果是这样,我想可能有关于该主题的 GitHub 问题;我没有看过。)
  • @JeremyCaney 我使用 2.1 重现了该问题,但没有使用 2.2。以下 github 问题包含有关此行​​为 github.com/aspnet/KestrelHttpServer/issues/1144 的许多有趣信息。您能否升级到 v2.2 或不使用 Kestrel ?

标签: c# asp.net-core asp.net-web-api character-encoding asp.net-core-2.1


【解决方案1】:

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

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

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

  • 迁移到 .net core 2.2 或更高版本
  • 来自客户端的 URL 编码标头
  • 使用反向代理在标头到达您的 ASP.net 应用程序之前对其进行编码

【讨论】:

猜你喜欢
  • 2011-10-01
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
  • 2011-09-20
相关资源
最近更新 更多