【问题标题】:400 BadRequest response with .NET Core but not .NET Framework.NET Core 但不是 .NET Framework 的 400 BadRequest 响应
【发布时间】:2019-06-19 15:58:50
【问题描述】:

我有链接 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 中再次对其进行测试时,完整的链接完全可以达到 200 OK,没有出现任何问题。

我还在 .NET Core 中使用 Flurl、RestSharp 等第三个库进行了测试,但结果只有一个包含 400 Bad Request。

网站上的另一个测试https://httpstatus.io仍然是200 OK

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

那么问题出在哪里?

【问题讨论】:

    标签: c# .net-core httprequest .net-4.5 .net-core-2.1


    【解决方案1】:

    这是一个已知的错误。我前段时间在 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);
    

    【讨论】:

    • 插入解决方法后似乎没有任何变化,我可能会继续在 .NET Core 3 中对其进行测试并尽快更新
    • @TấnNguyên 这可能适用于您的情况。我使用了这个对我有用的测试代码:AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false); HttpClient hc = new HttpClient(); var result = await hc.GetStringAsync("http://corefx-net.cloudapp.net/Redirect.ashx?statuscode=302&uri=%2FEcho.ashx%23something"); Console.WriteLine(result);.
    • 糟糕,我的错误,我在 httpclient 声明之后插入,所以它仍然得到 HTTP 400。您的测试代码与 HTTP 200 一起使用!!!!非常感谢
    猜你喜欢
    • 1970-01-01
    • 2021-03-23
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    相关资源
    最近更新 更多