1

我正在尝试通过 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 的帮助下比较浏览器和我的程序的请求。然后我在请求中添加了一些标头,但这也无济于事。

4

2 回答 2

1

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

于 2012-01-23T17:27:28.220 回答
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();
于 2012-01-23T18:17:01.960 回答