2012-03-04 2 views
0

私がWrapした第三者Apiのリソースに対するOAuthアクセストークンリクエストを作成している場合、たとえばすべての顧客事例データを取得します。ParamsなしでGET用のバッファが必要ですか?

私はデータをリクエストしているだけなので、このGETに必要なクエリーストリングはありませんが、私の質問は、何らかの種類のリクエストストリーム(バイトデータ)を指定する必要があるのでしょうか、要求オブジェクトによって-1と読み取られますか?

私はContentLengthやバッファを設定することについて心配する必要はありません。返された.jsonを取得するためにストリームリーダーを使用するか、APIが私に送り返したものが正しいかどうかを確認するだけです。

 HttpWebResponse response; 
     Stream dataStream; // data returned from the response 
     byte[] buffer = null; // data to send in the request body 

     // FYI the "data" variable is just an incoming param to my send method, a string if I want to send data in the request (i.e. json, xml, whatever I am sending if needed) 
     if (!string.IsNullOrEmpty(data.Trim())) buffer = Encoding.UTF8.GetBytes(data); 

     // the resourceUrl variable I'm specifying for example is "ttp://someThirdPartyApi.com/api/v1/cases.json" 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(resourceUrl); 

     // I then add an authorization header to the resonse.Headers (not shown here) 

     request.ServicePoint.Expect100Continue = false; 
     request.PreAuthenticate = true; 

     // do we have any data to send in the request -body-?? 
     if (buffer != null && buffer.Any()) 
     { 
      request.ContentLength = buffer.Length; 

      using (Stream stream = request.GetRequestStream()) 
      { 
       stream.Write(buffer, 0, buffer.Length); 
       stream.Close(); 
      } 
     } 

     // no data to send, just get the data returned in the response using a StreamReader 
+0

試しましたか?何が起こった? – Oded

答えて

0

実際にデータを投稿していない限り、リクエストストリームで何もする必要はありません。あなたは何をしているのかに応じて、WebClientとそのDownloadString()メソッドを使用することができ、下位WebRequestの使用に伴う余分なコードをたくさん避けることさえできます。

もちろん、いくつかのコントロールと柔軟性は失われますが、シンプルなAPIの場合は必要ありません。

+0

確かに、WebClientから離れたままにしておきたいのは、私たちがこれをどのような環境に移すのかわからないからです。私は余分なオーバーヘッドを気にしない、私はそれをきれいにして再利用するヘルパーやユーティリティメソッドを作成することができます。 – PositiveGuy

+0

どういう意味ですか? Monoに移行することについて話していますか? MonoはWebClientをサポートしています。あなたがいる環境に基づいてどちらか一方を使うことができない理由はありません。それはあなたが望むコントロールのレベルだけです。 – Jordan

+0

あなたがそれを必要とする場合は完全にコントロールするつもりはありません。後でその限界にぶつかる可能性があるかどうかわからないときに限界があるものを設計するのはなぜですか?常にフレキシビリティのために設計してください。この場合は、HttpWebRequestを使用するコードのほんの数行を使用するか、データを取得するためにストリームを使用するだけで問題ありません。コードをいくつか追加してコード化するのは大したことではありません私のアプリケーションは長期的には拡張可能なので、おそらくこれをリファクタリングする必要はありません。 – PositiveGuy

関連する問題