Есть ли способ изменить поведение HttpWebRequest на кодах состояния 400/500? - PullRequest
7 голосов
/ 07 мая 2011

Я работаю над созданием свободного клиентского интерфейса REST поверх типов HttpWebRequest / HttpWebResponse в .NET. Пока все хорошо ... однако я пытаюсь разработать сменную инфраструктуру безопасности, которая может автоматически обрабатывать согласование токенов безопасности, обновления токенов и т. Д.

Я столкнулся с проблемой из-за характера работы HttpWebRequest/Response, когда они сталкиваются с HTTP-кодом статуса 400 или 500 серий. Вместо того, чтобы просто устанавливать свойства .StatusCode и .StatusDescription и позволять вам обрабатывать их так, как вы хотите, они выдают WebException. Вообще говоря, это, вероятно, не проблема ... однако, как мы аутентифицируем (производная от OAuth 2.0), мне нужно обрабатывать некоторые ошибки серии 400 без исключений.

Есть ли способ переконфигурировать HttpWebRequest / Response, чтобы НЕ выбрасывать WebException, и позволить потребителю самостоятельно определять обработку ошибок? Я знаю, что существует несколько способов обработки Expect-100-Continue со старыми серверами Http1.0 ... Мне любопытно, есть ли аналогичный способ отключения WebExceptions.

(О, и просто не могу устоять ... БОЛЬШОЙ ВЫСТУПЛЕНИЕ моим ЧУДЕСНЫМ друзьям в RedGate за незаконное изъятие БЕСПЛАТНОЙ бесплатной версии Reflector 6 ... Я мог бы понять этот сам по себе, если бы я мог отследить код ... но увы ... Отражатель, к сожалению, является нежизнеспособным вариантом, поскольку он потребляет себя в результате автолиза.; P)

1 Ответ

8 голосов
/ 08 июня 2011

У меня была похожая проблема, и я решил ее с помощью следующего вспомогательного метода:

public static HttpWebResponse MakeRequest(HttpWebRequest request)
{
    try
    {
        return (HttpWebResponse)request.GetResponse();
    }
    catch (WebException we)
    {
        if (we.Response != null)
        {
            return (HttpWebResponse)we.Response;
        }
        throw;
    }
}
...