2013-09-05 3 views
1

Вот мой код, чтобы получить документ XML из URL, который передается в.сервер возвращает ошибку 500 при использовании WebRequest, чтобы получить XML-документ

var request = WebRequest.Create(url); 
        request.Method = "GET"; 
        request.ContentType = "application/x-www-form-urlencoded"; 
        request.ContentLength = 0; 

        var response = request.GetResponse(); // Error is thrown here 

Когда я скопировать и вставить URL в браузере это работает просто хорошо.

Вот полный XML, который возвращается

<Model> 
    <Item> 
    <Id>7908</Id> 
    </Item> 
</Model> 

ли XML в неверном формате? Я попытался изменить тип контента как application/xml, но я все еще получаю эту ошибку.

EDIT =========================================================================================================================================================== ==========

Я пытаюсь использовать WebClient с помощью этого кода: строка

using (var wc = new System.Net.WebClient()) 
       { 
        wc.Headers["Method"] = "GET"; 
        wc.Headers["ContentType"] = "text/xml;charset=\"utf-8\""; 
        wc.Headers["Accept"] = "text/xml, */*"; 
        wc.Headers["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; .NET CLR 3.5.30729;)"; 
        wc.Headers[HttpRequestHeader.AcceptLanguage] = "en-us"; 
        wc.Headers["KeepAlive"] = "true"; 
        wc.Headers["AutomaticDecompression"] = (DecompressionMethods.Deflate | DecompressionMethods.GZip).ToString(); 

        var response = wc.DownloadString(url); 
       } 

ответ пуст !!! Любые идеи, почему это не возвращает никакого результата, но вставка URL-адреса в браузер возвращает xml?

+1

Что говорит остальная часть сообщения об ошибке? – David

+0

«Удаленный сервер ответил на ошибку: (500) Внутренняя ошибка сервера». – segFault

+0

Вам нужно включить подробные сообщения об ошибках, чтобы вы могли получить полное сообщение об ошибке и трассировку стека. Недостаточно информации для диагностики вашей проблемы без нее. – David

ответ

2

Я, наконец, получил его работу. Я должен был использовать этот код:

using (var wc = new System.Net.WebClient()) 
       { 
        wc.Headers["Method"] = "GET"; 
        wc.Headers["Accept"] = "application/xml"; 

        var response = wc.DownloadString(url); 
       } 

Ключ был в использовании заголовка принятия «application/xml», иначе ответ вернется пустым.

0

Почему бы не использовать WebClient.

public class MyWebClient : WebClient 
{ 

    protected override WebRequest GetWebRequest(Uri address) 
    { 
     var request = base.GetWebRequest(address); 
     if (request.GetType() == typeof(HttpWebRequest)){ 
      ((HttpWebRequest)request).UserAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36"; 
     } 
     return request; 
    } 
} 

using(var wc = new MyWebClient()){ 
    var response = wc.DownloadString(url); 
    //do stuff with response 
} 
+0

У меня такая же ошибка 500. :( – segFault

+0

Только другая вещь, о которой я могу думать, это изменение пользовательского агента. Обновлено с помощью примера. – Rob

+0

Я обновил свой вопрос, и я добавил пользовательский агент и другие заголовки, но ничего не возвращается в переменной ответа. Должен ли я искать начало или что-то в этом роде? – segFault

0

Это следует надеяться, сделать трюк:

try 
{ 
    using(var response = (HttpWebResponse)request.GetResponse()) 
    { 
    // Do things 
    } 
} 
catch(WebException e) 
{ 
    // Handled!... 
} 

Try, что предложил Джоэл Ли, если это не удается.