C# 使用WebRequest获取XML文档时服务器返回500错误
下面是我从传入的url获取xml文档的代码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;
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,表示不应发送内容长度头。我唯一能想到的是更改用户代理。使用示例更新。我更新了我的问题,并添加了用户代理和其他标题,但响应变量中没有返回任何内容。我必须从头开始吗?