.NET Core 但不是 .NET Framework 的 400 BadRequest 响应

400 BadRequest response with .NET Core but not .NET Framework

我有 link http://www.swensens.com.vn/#huong-vi-tinh-yeu,我需要根据请求验证它是否仍在工作并获取 StatusCode。

就这么简单

var client = new HttpClient();
var result = await client.GetAsync(@"http://www.swensens.com.vn/#huong-vi-tinh-yeu");           
Console.Write(result.StatusCode);

当我使用 .NET Core 2.1 进行测试时,它收到 400 Bad Request。我怀疑“#huong-vi-tinh-yeu”可能会导致问题,因为没有它们我收到了 200 OK。但是当我在 .NET Framework 中再次测试它时,完整的 link 完美地获得 200 OK,没有出现任何问题。

我还在 .NET Core 中使用第 3 个库(例如 Flurl、RestSharp)进行了测试,但结果只有一个带有 400 Bad Request。

网站上再测试https://httpstatus.io还是200 OK

我想保留 .NET Core,因为我目前的 Azure Function 系统是通过 .NET Core 编写的。

那么问题是什么?

这是一个已知错误。我不久前在 Github 存储库中报告了该错误:[2.1] Redirect with location having an anchor fails in a HTTP 400 on some servers #34728

似乎这个错误是在 .NET Core 2.1 中引入的,并在 .NET Core 3 中修复。

作为临时解决方法,您可以在发出任何 HTTP 请求之前调用它,这将禁用错误代码:

AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false);