WebClient: Игнорирайте HTTP 500

Пиша програма, която извлича някои данни от сървър, извършва някои операции върху него и записва изхода в csv файл. Проблемът, който имам е, че сървърът (за който не нося отговорност) ВИНАГИ връща HTTP 500 вътрешна сървърна грешка. Говорих с екипа, който се грижи за него, и въпреки че са наясно с грешката, те казаха, че не оказва достатъчно въздействие, за да могат да я разрешат.

Има ли начин да игнорирам този отговор в моя код и пак да получа данните?


person Matt G    schedule 12.11.2012    source източник
comment
Сървърът връща ли данните и само кодът на състоянието е грешен, или тялото на отговора е съобщение за грешка (напр. грешка на ASP.NET)?   -  person dtb    schedule 12.11.2012
comment
Заявката работи ли в уеб браузър? Какъв код на състоянието се връща там? Какви са разликите между заявката на браузъра и вашата заявка? Използвайте Wireshark или Fiddler, за да разгледате HTTP трафика.   -  person dtb    schedule 12.11.2012
comment
Сървърът връща данните, да. Само кодът на отговора е грешен. Работи в уеб браузър.   -  person Matt G    schedule 12.11.2012


Отговори (1)


Ако използвате HttpWebRequest/Response, това трябва да ви помогне да започнете:

response = null;

try
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("<url>");

    response = (HttpWebResponse)request.GetResponse();

    //no error
}
catch (WebException e)
{
    if (e.Status == WebExceptionStatus.ProtocolError)
    {
        response = (HttpWebResponse)e.Response;

        if((int)response.StatusCode == 500)
        {
            using (StreamReader sr = new StreamReader(response.GetResponseStream()))
            {
                var result = sr.ReadToEnd();
            }
        }
    }
}
person Chad    schedule 12.11.2012
comment
Благодаря Чад, това го направи. Не използвах HttpWebRequest, просто използвах WebClient. Това обаче работи. - person Matt G; 12.11.2012
comment
За всеки, който се интересува, този метод може да се използва и ако използвате WebClient. Просто хванете WebException и го обработете както по-горе. - person Falconne; 30.03.2018