C# 使用WebRequest获取XML文档时服务器返回500错误

C# 使用WebRequest获取XML文档时服务器返回500错误,c#,httpwebrequest,xmldocument,C#,Httpwebrequest,Xmldocument,下面是我从传入的url获取xml文档的代码 var request = WebRequest.Create(url); request.Method = "GET"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = 0;

下面是我从传入的url获取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>

响应字符串为空!!!你知道为什么这不是返回任何结果,而是将url粘贴到浏览器中会返回xml吗?

为什么不使用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
}

希望这能起到作用:

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

如果失败,试试Joel Lee的建议。

我终于让它工作了。我必须使用以下代码:

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);
                }
using (var wc = new System.Net.WebClient())
                {
                    wc.Headers["Method"] = "GET";
                    wc.Headers["Accept"] = "application/xml";

                    var response = wc.DownloadString(url);
                }

该键使用“application/xml”的accept头,否则响应将返回为空

错误消息的其余部分说什么?“远程服务器返回了一个错误:(500)内部服务器错误。”您需要打开详细的错误消息,以便获得完整的错误消息和堆栈跟踪。没有它,没有足够的信息来诊断您的问题。我在调试c#代码时遇到此异常。我尝试捕获WebException,但它只包含有关请求的信息,但没有说明返回500错误的原因。请查看。据我所知,在GET请求中,您真的不应该有任何内容长度头。如果省略设置
request.ContentLength=0
的行,默认值为-1,表示不应发送内容长度头。我唯一能想到的是更改用户代理。使用示例更新。我更新了我的问题,并添加了用户代理和其他标题,但响应变量中没有返回任何内容。我必须从头开始吗?