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

本文关键字:接收 文件 响应 浏览器 Xml | 更新日期: 2023-09-27 18:21:06

我正试图通过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)。一个尝试的链接:链接(这是我无法通过C#访问的错误文件)。

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

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

在.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();

为什么不捕获异常,然后进行相应的处理呢。如果您想显示任何自定义错误,也可以在catch块中显示。