Как избежать WebException для 403 Запрещенный ответ? - PullRequest
3 голосов
/ 05 декабря 2010

У меня есть приложение, которое иногда должно выполнить несколько запросов к серверу, чтобы убедиться, что эти запросы правильно заблокированы. Другими словами, ожидаемый ответ сервера - 403 Запрещено.

С таким фрагментом кода:

HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(protectedPage);
httpRequest.Method = WebRequestMethods.Http.Head;
WebResponse response = HttpRequest.GetResponse();

a WebException выбрасывается на последней строке.

При профилировании кода это исключение в блоке try / catch влияет на производительность, чего я хочу избежать.

Есть ли способ проверить ответ сервера, ожидая 403, без необходимости перехватывать исключение (но избегая прямого использования сокетов)?

Ответы [ 2 ]

3 голосов
/ 05 декабря 2010

К сожалению, это досадное исключение в фреймворке, и его невозможно избежать (пока еще используется класс HttpWebRequest). Но, как указал Хай, эта обработка исключений займет наносекунды, тогда как сам веб-запрос займет в лучшем случае миллисекунды, так что не беспокойтесь об этом.

Объект WebException имеет свойство Response, которое содержит ответ; когда вы обрабатываете исключение, важно избавиться от объекта WebResponse (чтобы избежать утечки соединений).

2 голосов
/ 05 декабря 2010

То, что требует времени в профилировании, это, вероятно, не часть перехвата исключений, а фактический ответ с веб-сайта.

Свойство WebException.Status предоставит вам код состояния для ответа HTTP, и вы сможете выполнять дальнейшую обработку на основе этого.

...