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
который имеет более простой шаблон использования.