Как игнорировать 401 несанкционированную ошибку из веб-запроса, чтобы получить статус сайта - PullRequest
10 голосов
/ 01 марта 2012

Я пишу приложение для проверки состояния некоторых внутренних веб-приложений. Некоторые из этих приложений используют проверку подлинности Windows. Когда я использую этот код для проверки статуса, он выдает The remote server returned an error: (401) Unauthorized.. Это понятно, потому что я не предоставил учетные данные веб-сайту, поэтому я не авторизован

WebResponse objResponse = null;
WebRequest objRequest = HttpWebRequest.Create(website);
objResponse = objRequest.GetResponse();


Есть ли способ игнорировать ошибку 401, не делая что-то подобное?

WebRequest objRequest = HttpWebRequest.Create(website);

try
{
    objResponse = objRequest.GetResponse();
}
catch (WebException ex)
{
    //Catch and ignore 401 Unauthorized errors because this means the site is up, the app just doesn't have authorization to use it.
    if (!ex.Message.Contains("The remote server returned an error: (401) Unauthorized."))
    {
        throw;
    }                    
}

Ответы [ 3 ]

18 голосов
/ 20 марта 2012

Я бы предложил попробовать это:

        try
        {
            objResponse = objRequest.GetResponse() as HttpWebResponse;
        }
        catch (WebException ex)
        {
            objResponse = ex.Response as HttpWebResponse;
        }
        finally

В WebException есть ответ на всю информацию, которую вы хотите.

3 голосов
/ 01 марта 2012

Короче говоря, вы захотите проверить myHttpWebResponse.StatusCode для кода состояния и действовать соответственно.

Пример кода от ссылка :

public static void GetPage(String url) 
    {
        try 
          { 
                // Creates an HttpWebRequest for the specified URL. 
                HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url); 
                // Sends the HttpWebRequest and waits for a response.
                HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); 
                if (myHttpWebResponse.StatusCode == HttpStatusCode.OK)
                   Console.WriteLine("\r\nResponse Status Code is OK and StatusDescription is: {0}",
                                        myHttpWebResponse.StatusDescription);
                // Releases the resources of the response.
                myHttpWebResponse.Close(); 

            } 
        catch(WebException e) 
           {
                Console.WriteLine("\r\nWebException Raised. The following error occured : {0}",e.Status); 
           }
        catch(Exception e)
        {
            Console.WriteLine("\nThe following Exception was raised : {0}",e.Message);
        }
    }
3 голосов
/ 01 марта 2012

Когда сервер недоступен или недоступен, вы получите исключение тайм-аута.Я знаю, что единственный способ справиться с этим - попробовать / поймать.

Я вполне уверен, что так обстоит дело с большинством ошибок (401/404/501), поэтому: Нет, вы не можете игнорировать (предотвращать) исключения, но вам придется их обрабатывать.Это единственный способ получить большинство кодов состояния, которые ищет ваше приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...