1

C#経由でlast.fmAPIにアクセスしようとしています。最初のテストとして、それが重要かどうか、似たようなアーティストに質問しています。

正しいアーティスト名、つまり「Nirvana」を渡すと、XML応答が返されます。私の問題は、無効な名前(つまり、「Nirvana23」)を配信すると、XMLを受信せず、エラーコード(403または400)とを受信することWebExceptionです。

興味深いことに、ブラウザ内にURLを入力すると(FirefoxとChromeでテスト済み)、必要なXMLファイル(lastfm固有のエラーメッセージが含まれています)を受け取ります。

XmlReader私は両方を試しましたXDocument

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 に答える