POSTリクエストをC#で送信するときに問題が発生し、HTTPの基本を誤解しているようです。基本的に、RESTfullサービスclientを実装しています。これは次のように機能します:
私はWebRequest
を使用して(Authorizationヘッダー付きで)GETリクエストを作成し、それが機能しています。しかし、次のコードを使用してPUT要求を行うと、サービスから「認証に失敗しました-ログインしていません」というメッセージが返されます。
String url = String.Format("{0}/{1}", AN_SERVER, app);
WebRequest theRequest = WebRequest.Create(url);
theRequest.Method = "POST";
theRequest.ContentType = "text/x-json";
theRequest.ContentLength = json.Length;
Stream requestStream = theRequest.GetRequestStream();
requestStream.Write(Encoding.ASCII.GetBytes(json), 0, json.Length);
requestStream.Close();
theRequest.Headers.Add("Authorization", authToken);
HttpWebResponse response = (HttpWebResponse)theRequest.GetResponse();
POSTリクエストを送信しているときに、私は小さな間違いを犯しているはずです(少なくともそう願っています)。
ありがとう。
リクエストストリームが本文を追加しているため、リクエストスチームが機能する前にヘッダーを移動する(AI Wのコメントによる)。
Webrequestが内部的に実装される方法では、本文を書き込む前にヘッダーを終了する必要があり、ストリーム形式になったら、送信する準備ができています。
リフレクターまたはそのような逆コンパイルツールでのwebrequestの実装を見ると、ロジックを確認できます。
お役に立てれば