C#でsystem.net.webrequestを使用してjson応答を取得するにはどうすればよいですか?


80

外部ドメインからjsonデータを取得する必要があります。webrequestを使用して、Webサイトから応答を取得しました。コードは次のとおりです。

var request = WebRequest.Create(url);
string text;
var response = (HttpWebResponse) request.GetResponse();

using (var sr = new StreamReader(response.GetResponseStream()))
{
    text = sr.ReadToEnd();
}

jsonデータを取得できない理由を誰かが知っていますか?


誰かが私がjsonデータを取得できない理由を知っていますか?
h3n 2010年

6
必要using (var response = request.GetResponse()){ ... }です。問題を解決できない場合がありますが、リソースリークを節約できます。
ジョンサンダース

回答:


67

コンテンツタイプを明示的に要求する必要があります。

この行を追加します:

 request.ContentType = "application/json; charset=utf-8";
適切な場所で


このリクエストでパラメータを渡すことは可能ですか?
Jidheesh Rajan 2013

7
Request Content-Typeは、リクエスト本文のタイプを記述します。これは、データがサーバーに送信されている形式をサーバーに通知するために使用されます。応答のコンテンツタイプとは何の関係もありません。クライアントはAcceptヘッダーを使用して特定のタイプで応答するように要求する場合がありますが、サーバーは他の理由でそれを無視する場合があります。
temoto 2014年


これは古い答えですが、完全を期すために@SHEKHARSHETEに返信したいと思います。優れたNewtonSoft JSON.Netのようなものを使用して作業を行うことができます。ここで、これを行う方法を理解するための便利なガイドを読むことをお勧めします。newtonsoft.com/json
Tahir Khalid

73

一部のAPIでは必要な応答タイプを取得するために、リクエストに適切な「Accept」ヘッダーを指定する必要があります。

たとえば、APIがXMLとJSONでデータを返すことができ、JSONの結果が必要な場合は、HttpWebRequest.Acceptプロパティを「application / json」に設定する必要があります。

HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(requestUri);
httpWebRequest.Method = WebRequestMethods.Http.Get;
httpWebRequest.Accept = "application/json";

1
これでパラメータを渡すことは可能ですか?
Jidheesh Rajan 2013

おそらく、パラメータをrequestUrilocalhost / api / product / 123に追加してみることができます
DmitryBoyko 2014年


1
request.ContentType =「アプリケーション/ JSONのみを追加し、私はあなたのソリューションが正しいものだと思うので、私には十分ではありませんでした。
Campinho

現在受け入れられている回答が正しくないため、この回答を受け入れる必要があります。適切な場合使用していないの別の例は...「同意する」
Arkaine55
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.