HttpWebRequest в.NET Core 2.0 выбрасывает 302 найдено исключение

Мы обновляем наше приложение с.net framework до.net core 2.0.

В нем мы используем HttpWebRequest связаться с сайтом AllowAutoRedirect установить в ложь. Когда код выполняется request.GetResponse() Сайт вернет ответ 302, который в.net framework - вы можете взять ответ и обработать его (мы после set-cookie значение заголовка).

Однако в ядре.net 2.0 возникает исключение WebException:

The remote server returned an error: (302) Found.

Является ли мое понимание неверным в том смысле, что 302 должен приводить к возникновению исключения, а если для AllowAutoRedirect задано значение false, ответ все равно должен быть возвращен? Есть ли способ вызвать такое же поведение в.net framework?

2 ответа

Решение

Я получил ту же ошибку при настройке AllowAutoRedirect в false, Я решил проблему, просто завернув try-catchвокруг request.GetResponse() и присвоение результата исключения переменной

WebResponse response;
try {
   response = request.GetResponse();
}
catch(WebException e) {
   if(e.Message.Contains("302")
      response = e.Result;
}

Взгляните на эту проблему - HttpWebRequest в.NET Core 2.0, выбрасывающий 301, перемещен навсегда. Короче говоря, это говорит:

Если вы установите AllowAutoRedirect, тогда вы в конечном итоге не будете следовать перенаправлению. Это означает, что в конечном итоге с ответом 301.

HttpWebRequest (В отличие от HttpClient) создает исключения для неуспешных (не 200) кодов состояния. Таким образом, получить исключение (скорее всего, WebException) ожидается.

Итак, если вам нужно обработать это перенаправление (кстати, HTTPS -> HTTP), вам нужно перехватить его в блоке try/catch и проверить WebException и т. д. Это стандартное использование HttpWebRequest,

Именно поэтому мы рекомендуем разработчикам использовать HttpClient который имеет более простой шаблон использования.

Другие вопросы по тегам