ASP.NET MVC
Webサイトがあります。私のルートの1つは、5つのパラメーターを取るURL
です。説明のために、これらのパラメーターにはparameter1
、parameter2
、parameter3
、parameter4
、およびparameter5
という名前が付けられています。現在、私はPOST
を介してmvcアクションにWebClient
するC#
コードでURLを構築しています。そのコードは次のようになります。
WebClient myWebClient = new WebClient();
myWebClient.UploadStringCompleted += myWebClient_UploadStringCompleted;
string url = "http://www.example.com/customer/" + parameter1 + "/orders/" + parameter2 + "/" + parameter3 + "/" + parameter4 + "/" + parameter5;
myWebClient.UploadStringAsync(new Uri(url, UriKind.Absolute));
UploadString
メソッドがPOST
を実行すると確信しています。パラメーター値が非常に長くなる可能性があるため、POST
を実行する必要があります。実際、URLの合計の長さは20000文字になることもあると推測しています。とにかく、データを投稿しようとすると400 error
を受け取ります。これをデバッグするために、POST
でFiddler
をシミュレートする方法を見つけようとしています。
上記のようにクエリ文字列を介して値を渡すと仮定すると、Fiddler
にはどの値を入力しますか? Composer
タブから、Request Headers
エリアに何を入力すればよいかわかりません。また、URLに何を入力するのか完全にはわかりません。パラメータ値を含むURL全体をそこに入れるのか、それともRequest Headers
に属するのかはわかりません。
問題をデバッグするために、Fiddler
に入力する必要があるものは何ですか?
基本的に、すべてのパラメーターはURLの一部であり、これが問題の根本です。ここで何が起こっているのですか:URLの長さ制限に達し、「400 Bad request」エラーを受信しています。現実の世界では、ほとんどのWebブラウザーは2000文字を超えるURLで動作しません。
この問題を解決するには、リファクタリングを少し行うことをお勧めします。そのため、リクエストはURL http://www.example.com/customer/parameter1/orders
あるいは http://www.example.com/customer/orders
リクエストボディで送信するパラメータを使用します。 Fiddlerでこのようなリクエストをテストする方法は次のとおりです。
Composer
タブで、POST
request verbを選択しますURLを指定します
http://www.example.com/customer/parameter1/orders
または
Request Headers
次のようなコンテンツタイプヘッダーを設定できるセクション
Content-Type: application/x-www-form-urlencoded
または必要なその他のヘッダー。または、空白のままにしておくと問題が解決します。
最後にRequest Body
フィールドは、クエリ文字列形式でパラメータをリストします
parameter1name=parameter1value¶meter2name=parameter2value
この新しいケースでは、WebClient
を使用してこのようなリクエストを送信する方法を次に示します。
WebClient myWebClient = new WebClient();
myWebClient.UploadStringCompleted += myWebClient_UploadStringCompleted;
string url = "http://www.example.com/customer/orders";
string data = "parameter1name=parameter1value¶meter2name=parameter2value";
myWebClient.UploadStringAsync(new Uri(url, UriKind.Absolute), data);
送信された正確なリクエストを単純に模倣します。
これは私がそれを行う方法です: