14

大量のデータをHTTPハンドラーに送信しようとしています。URLの長さが制限されているため、GETを使用して送信できないため、代わりにPOSTすることにしました。問題は、値を取得できないことです。context.Request.Formは、アイテムが0であることを示しています。では、データをHttpHandlerにPOSTする方法はありますか?

4

6 に答える 6

11

確認するコードがあると、問題の診断に役立ちます。このようなことを試しましたか?

jQuery コード:

$.post('test.ashx', 
       {key1: 'value1', key2: 'value2'}, 
       function(){alert('Complete!');});

次に、ProcessRequest()メソッドで次のことができるはずです。

string key1 = context.Request.Form["key1"]; 

ProcessRequest() メソッドでリクエスト タイプを確認して、問題をデバッグすることもできます。

if(context.Request.RequestType == "POST")
{
    // Request should have been sent successfully
}
else
{
    // Request was sent incorrectly somehow
}
于 2009-05-27T02:29:05.133 に答える
4

私も同じ問題を抱えていました。クライアント/AJAXの問題でした。AJAX呼び出しリクエストヘッダー「ContentType」をに設定する必要がありました

application/x-www-form-urlencoded

それを機能させるために。

于 2010-03-09T10:46:10.747 に答える
3

私は同じ問題を抱えていましたが、最終的にコンテンツタイプを「json」に設定することが問題であることがわかりました...

contentType: "application/json; charset=utf-8"

これは、一部の一般的なチュートリアルで $ajax 呼び出しに追加するように提案されている行であり、ASPx Web サービスではうまく機能しますが、何らかの理由で、POST を使用する HttpHandler では機能しません。

クエリ文字列の値は正常に機能するため、キャッチするのは困難です (Web で見られる別の手法ですが、そのために POST を使用するのはあまり意味がありません)。

于 2010-02-13T11:49:27.690 に答える
1

同様の問題に直面しました。すべての問題を修正した後、私が見逃したことがもう1つありました。それは、web.config動詞を*ORに変更することGET,POSTです。その後、すべてが正常に機能しました。

<httpHandlers>
    ...
    <add verb="*" path="test.ashx" type="Handlers.TestHandler"/>
</httpHandlers>
于 2010-08-27T19:46:55.910 に答える
1

POST フィールドは次の場所に含まれています。

HttpContext.Request.Params

それらを取得するには、使用できます

var field = HttpContext.Request.Params["fieldName"];
于 2013-02-19T10:28:18.263 に答える
1

HTTP ハンドラに送信する POST データはクエリ文字列形式である必要がありますa=b&c=d。また、サーバー側でRequest["a"](will return b) などを使用して取得できます。

于 2009-05-26T05:08:39.423 に答える