C#でPOSTリクエストを送信する際に問題が発生しましたが、HTTPの基本的な誤解のようです。他のGETをしながら: C#でRESTfull/HTTPリクエストにヘッダーと投稿データを追加する
- メイクPOSTリクエストと:だから基本的に私はRESTfullサービスには以下のような作業クライアントを実装しています/ POST/PUTリクエスト
私はWebRequest
を使用して(許可ヘッダー付きで)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リクエストを送信している間、私は(少なくとも私はそう願っています)マイナーな間違いを犯している必要があります。だから私は何が間違っているの?
ありがとうございました。
requestStreamの前にHeaders.Addを移動してみましたか?奇妙に見えるもう一つのことは、requestStream.Write( "json =" + json)のようなリクエストに渡される名前付きパラメータがないことです。 –
@AI W:requestStreamの前にヘッダーを移動することで問題が解決されました。なぜここで順序が重要なのですか?どうもありがとうございました。私はこのことを "学ぶ"ことを試みる一日を費やし、Stackoverflowのビット30分がより役に立ちました。私はそれを受け入れることができるように答えとして書くことができますか?再度、感謝します。ところで、jsonオブジェクトは要求されたものであり、名前付きのパラメータではありません。 –
サーバは許可されていないサービスに対するPUT要求を受け入れますか? IISの一部のバージョンでは、IIRC PUT(およびDELETE)はデフォルトでは有効になっていないため、他のサーバーでも同様です。 – carlosfigueira