web-dev-qa-db-ja.com

POST Fiddlerを介したasp.net mvcアクションへのリクエスト

ASP.NET MVC Webサイトがあります。私のルートの1つは、5つのパラメーターを取るURLです。説明のために、これらのパラメーターにはparameter1parameter2parameter3parameter4、および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を受け取ります。これをデバッグするために、POSTFiddlerをシミュレートする方法を見つけようとしています。

上記のようにクエリ文字列を介して値を渡すと仮定すると、Fiddlerにはどの値を入力しますか? Composerタブから、Request Headersエリアに何を入力すればよいかわかりません。また、URLに何を入力するのか完全にはわかりません。パラメータ値を含むURL全体をそこに入れるのか、それともRequest Headersに属するのかはわかりません。

問題をデバッグするために、Fiddlerに入力する必要があるものは何ですか?

25
Eels Fan

基本的に、すべてのパラメーターはURLの一部であり、これが問題の根本です。ここで何が起こっているのですか:URLの長さ制限に達し、「400 Bad request」エラーを受信して​​います。現実の世界では、ほとんどのWebブラウザーは2000文字を超えるURLで動作しません。

この問題を解決するには、リファクタリングを少し行うことをお勧めします。そのため、リクエストはURL http://www.example.com/customer/parameter1/orders あるいは http://www.example.com/customer/ordersリクエストボディで送信するパラメータを使用します。 Fiddlerでこのようなリクエストをテストする方法は次のとおりです。

  1. Composerタブで、POST request verbを選択します
  2. URLを指定します

    http://www.example.com/customer/parameter1/orders

    または

    http://www.example.com/customer/orders

  3. Request Headers次のようなコンテンツタイプヘッダーを設定できるセクション

    Content-Type: application/x-www-form-urlencoded
    

    または必要なその他のヘッダー。または、空白のままにしておくと問題が解決します。

  4. 最後にRequest Bodyフィールドは、クエリ文字列形式でパラメータをリストします

    parameter1name=parameter1value&parameter2name=parameter2value
    

この新しいケースでは、WebClientを使用してこのようなリクエストを送信する方法を次に示します。

WebClient myWebClient = new WebClient();
myWebClient.UploadStringCompleted += myWebClient_UploadStringCompleted;

string url = "http://www.example.com/customer/orders";
string data = "parameter1name=parameter1value&parameter2name=parameter2value";

myWebClient.UploadStringAsync(new Uri(url, UriKind.Absolute), data);
47
Andrei

送信された正確なリクエストを単純に模倣します。

これは私がそれを行う方法です:

  1. オープンフィドラー
  2. コマンドを再発行したいページに移動します。つまり、バグステップを繰り返しますが、リスト内のリクエストを監視します。
  3. リストから選択して右クリックし、再生>再発行と編集に進みます
  4. これは複製されたリクエストを作成しますが、送信される前にブレークポイントに到達します(右側に赤いバーが表示されます)
  5. この上で、Headers、QueryStringなどで値をダブルクリックして送信された値を編集できます
  6. 次に、実行するをクリックして完了します
6
hutchonoid