25

私はASP.NET MVCウェブサイトを持っています。私のルートの 1 つは、URL5 つのパラメーターを取る です。説明のために、これらのパラメータにはparameter1parameter2parameter3parameter4、およびという名前が付けられていますparameter5。現在、私はいくつかのC#コードでURLを構築していますPOST.mvcアクションはWebClient. そのコードは次のようになります。

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これをデバッグするために、 inをシミュレートする方法を見つけようとしていFiddlerます。

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

Fiddler問題をデバッグするには、何を入力する必要がありますか?

4

2 に答える 2

47

基本的に、すべてのパラメーターは URL の一部であり、これが問題の原因です。URL の長さの制限に達し、「400 Bad request」エラーを受け取ります。実際には、ほとんどの Web ブラウザーは 2000 文字を超える URL では機能しません。

この問題を解決するには、少しリファクタリングを行うことをお勧めします。これにより、リクエストが URL に送信されるhttp://www.example.com/customer/parameter1/ordershttp://www.example.com/customer/orders、リクエスト本文でパラメーターが送信されるようになります。Fiddler でこのようなリクエストをテストする方法は次のとおりです。

  1. タブでリクエスト動詞Composerを選択しますPOST
  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);
于 2013-06-20T14:14:35.850 に答える