C# 在ASP.NET Core API 2.1中发送带有非ASCII字符头的请求

C# 在ASP.NET Core API 2.1中发送带有非ASCII字符头的请求,c#,asp.net-core,asp.net-web-api,character-encoding,asp.net-core-2.1,C#,Asp.net Core,Asp.net Web Api,Character Encoding,Asp.net Core 2.1,我有一个非常简单的ASP.NET核心API。我正在向这个服务发送标题,它运行得很好 但问题是,当我在请求头中发送一个类似“á”的字符时,请求会失败,出现400:Bad request 我知道这不是客户机的问题——我用Java API测试了相同的代码,结果成功了。我还对邮递员提出了同样的问题 如何告诉服务器在请求头中接受UTF-8 [HttpPut(“/api/Test”)] 公共IActionResult测试([FromHeader(Name=“Word”)]字符串字) { 返回Ok(“我接受了

我有一个非常简单的ASP.NET核心API。我正在向这个服务发送标题,它运行得很好

但问题是,当我在请求头中发送一个类似“á”的字符时,请求会失败,出现
400:Bad request

我知道这不是客户机的问题——我用Java API测试了相同的代码,结果成功了。我还对邮递员提出了同样的问题

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

[HttpPut(“/api/Test”)]
公共IActionResult测试([FromHeader(Name=“Word”)]字符串字)
{
返回Ok(“我接受了您的请求”);
}

编辑:
它与3.1一起工作,所以现在我们知道这是与2.1相关的。

这是.net core 2.1的一个限制,它已与.net core 2.2一起修复

有关此行为的更多信息,请参阅本期github

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

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

我认为目前不支持这一点:对不起,这是回应。我相信头文件是由以下更改支持的:@MartinCostello,那么,我如何实现它呢?仅供参考:@cyridurand报告说这在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问题包含了很多关于这种行为的有趣信息。你能升级到v2.2还是不用Kestrel?@CarlosLópezMarí你说得对。默认情况下,IIS集成充当Kestrel服务器的反向代理。我记得您可以在没有Kestrel的情况下配置IIS,但找不到如何配置的文档。我看到了这个:但我还没有测试过。