Xml响应文件:在浏览器中收到,而不是通过C#

时间:2012-01-23 17:18:10

标签: c# .net xml webexception

我正在尝试通过C#访问last.fm API。作为第一个测试,如果重要,我会询问类似的艺术家。

当我传递正确的艺术家名称,即“Nirvana”时,我得到了一个XML响应。我的问题是当我发送一个无效的名称(即“Nirvana23”)时,我没有收到XML但是错误代码(403或400)和WebException

有趣的事情:如果我在浏览器中输入URL(使用Firefox和Chrome测试),我会收到我想要的XML文件(包含lastfm特定的错误消息)。

我尝试了XmlReaderXDocument

XDocument doc = XDocument.Load(requestUrl);

HttpWebRequest

string httpResponse = "";

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUrl);

HttpWebResponse response = null;
StreamReader reader = null;

try
{
     response = (HttpWebResponse)request.GetResponse();
     reader = new StreamReader(response.GetResponseStream());
     httpResponse = reader.ReadToEnd();
}    

URL类似于“http://ws.audioscrobbler.com/2.0/?method=artist.getsimilar&artist=Nirvana23”(和lastfm给出的特定键,但即使没有它 - 它应该返回XML)。尝试尝试的链接:link(这是我无法通过C#访问的错误文件)。

我也尝试过(没有成功):在WireShark的帮助下,通过浏览器和我的程序比较请求。然后我在请求中添加了一些标题,但这也无济于事。

2 个答案:

答案 0 :(得分:1)

为什么不捕获异常然后相应地处理它。如果要显示任何自定义错误,也可以在catch块中执行此操作。

答案 1 :(得分:1)

在.NET中,WebRequest正在将HTTP错误代码转换为异常,而您的浏览器只是忽略它们,因为响应不为空。如果捕获异常,则GetResponseStream方法仍应返回您期望的错误XML。

编辑:

试试这个:

string httpResponse = "";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUrl);

WebResponse response = null;
StreamReader reader = null;
try
{
    response = request.GetResponse();
}
catch (WebException ex)
{
    response = ex.Response;
}

reader = new StreamReader(response.GetResponseStream());
httpResponse = reader.ReadToEnd();