400 Ответ BadRequest с .NET Core, но не .NET Framework

У меня была ссылка 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 без каких-либо проблем.

Я также тестировал с использованием третьей библиотеки, такой как Flurl, RestSharp в .NET Core, но результаты были только с 400 Bad Request.

Еще одно тестирование на веб-сайте https://httpstatus.io, все еще 200 ОК  1

Я хочу сохранить .NET Core, потому что моя текущая система функций Azure написана через .NET Core.

Так в чем проблема?


person Tấn Nguyên    schedule 19.06.2019    source источник


Ответы (1)


Это известная ошибка. Некоторое время назад я сообщил об этой ошибке в репозитории Github: [2.1] Не работает перенаправление с местоположением, имеющим привязку в HTTP 400 на некоторых серверах # 34728

Похоже, что эта ошибка появилась в .NET Core 2.1 и исправлена ​​в .NET Core 3.

В качестве временного обходного пути вы можете вызвать это перед выполнением каких-либо HTTP-запросов, что отключит код ошибки:

AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false);
person Patrick Hofman    schedule 19.06.2019
comment
Кажется, ничего не изменилось, когда я вставил обходной путь, я могу продолжить тестирование в .NET Core 3 и скоро обновлю - person Tấn Nguyên; 19.06.2019
comment
@ 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);. - person Patrick Hofman; 19.06.2019
comment
К сожалению, моя ошибка, я вставил после объявления httpclient, чтобы он по-прежнему имел HTTP 400. Ваш тестовый код работает с HTTP 200 !!!! Большое спасибо - person Tấn Nguyên; 19.06.2019