#httpwebrequest #webexception #custom-error-handling
#httpwebrequest #webexception #пользовательская обработка ошибок
Вопрос:
Я работаю над созданием свободного клиентского интерфейса REST поверх HttpWebRequest
/ HttpWebResponse
типов в .NET. Пока все хорошо … однако я пытаюсь разработать подключаемую платформу безопасности, которая может автоматически обрабатывать согласование токена безопасности, обновление токена и т.д.
Я столкнулся с проблемой из-за характера того, как HttpWebRequest/Response
работают, когда они сталкиваются с кодом состояния HTTP серии 400 или 500. Вместо того, чтобы просто устанавливать свойства .StatusCode
и .StatusDescription
и позволять вам обрабатывать их любым способом, который вы пожелаете, они выдают WebException
. Вообще говоря, это, вероятно, не проблема … однако способ аутентификации (производный от OAuth 2.0), мне нужно обрабатывать определенные ошибки серии 400 без возникновения исключения.
Есть ли какой-нибудь способ перенастроить HttpWebRequest / Response, чтобы НЕ выдавать ошибку WebException
, и позволить потребителю определять собственную обработку ошибок? Я знаю, что есть несколько обходных способов обработки ожидаемого продолжения на старых серверах Http1.0…Мне любопытно, существует ли аналогичный обходной способ отключения WebExceptions.
(О, и просто не могу удержаться … БОЛЬШОЕ СПАСИБО моим ЗАМЕЧАТЕЛЬНЫМ друзьям в RedGate за незаконное изъятие бесплатной версии Reflector 6 с привязкой к лицензии … Я мог бы разобраться с этим самостоятельно, если бы смог просмотреть код … но увы…К сожалению, отражатель теперь нежизнеспособен, поскольку он израсходовал себя с помощью автолиза. ;P )
Комментарии:
1. Что касается Reflector, попробуйте использовать ILSpy.
Ответ №1:
У меня была похожая проблема, и я решил ее с помощью следующего вспомогательного метода:
public static HttpWebResponse MakeRequest(HttpWebRequest request)
{
try
{
return (HttpWebResponse)request.GetResponse();
}
catch (WebException we)
{
if (we.Response != null)
{
return (HttpWebResponse)we.Response;
}
throw;
}
}
Комментарии:
1. Спасибо за ответ. В итоге я сделал практически то же самое. Я не уверен, почему Microsoft решила заставить пользователей перехватывать исключение в случае кода состояния типа ошибки … но это действительно усложняет ситуацию. Хороший маленький помощник… однако можно попробовать сделать это методом расширения в HttpWebRequest… упрощает использование. 😉