大量のデータをHTTPハンドラーに送信しようとしています。URLの長さが制限されているため、GETを使用して送信できないため、代わりにPOSTすることにしました。問題は、値を取得できないことです。context.Request.Formは、アイテムが0であることを示しています。では、データをHttpHandlerにPOSTする方法はありますか?
6 に答える
確認するコードがあると、問題の診断に役立ちます。このようなことを試しましたか?
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
}
私も同じ問題を抱えていました。クライアント/AJAXの問題でした。AJAX呼び出しリクエストヘッダー「ContentType」をに設定する必要がありました
application/x-www-form-urlencoded
それを機能させるために。
私は同じ問題を抱えていましたが、最終的にコンテンツタイプを「json」に設定することが問題であることがわかりました...
contentType: "application/json; charset=utf-8"
これは、一部の一般的なチュートリアルで $ajax 呼び出しに追加するように提案されている行であり、ASPx Web サービスではうまく機能しますが、何らかの理由で、POST を使用する HttpHandler では機能しません。
クエリ文字列の値は正常に機能するため、キャッチするのは困難です (Web で見られる別の手法ですが、そのために POST を使用するのはあまり意味がありません)。
同様の問題に直面しました。すべての問題を修正した後、私が見逃したことがもう1つありました。それは、web.config
動詞を*
ORに変更することGET,POST
です。その後、すべてが正常に機能しました。
<httpHandlers>
...
<add verb="*" path="test.ashx" type="Handlers.TestHandler"/>
</httpHandlers>
POST フィールドは次の場所に含まれています。
HttpContext.Request.Params
それらを取得するには、使用できます
var field = HttpContext.Request.Params["fieldName"];
HTTP ハンドラに送信する POST データはクエリ文字列形式である必要がありますa=b&c=d
。また、サーバー側でRequest["a"]
(will return b
) などを使用して取得できます。