1

HttpHandler クラスで実行される Web サービスがあります。このクラスでは、フォーム/クエリ文字列パラメーターのリクエスト ストリームを検査します。状況によっては、これらのパラメーターが通過していないように見えました。少し掘り下げた後、よくわからない動作に出くわしました。下記参照:

// リクエストには 'a=1&b=2&c=3' が含まれます
// テストのみ: リクエスト全体を読み取ります
文字列の内容;
使用 (StreamReader sr = 新しい StreamReader(context.Request.InputStream))
{
    内容 = sr.ReadToEnd();
}
// ここで、'contents' は通常正しいです - 'a=1&b=2&c=3' を含んでいます。時々それは空です。

文字列 a = context.Request["a"];

// ここでは、上記の「contents」変数が正しいかどうかに関係なく、a = null

なぜこれが起こっているのか、誰かが私に説明できますか? 私は .NET WebClient と UploadDataAsync を使用して、クライアントで要求を実行しています。

さらに情報が必要な場合は、お知らせください。

4

1 に答える 1

0

クエリ文字列パラメーターの要求ストリームを検査するのはなぜですか? HTTP リクエストを処理するために、.Net 内には多くの組み込み型があります。次のコードを使用すると、クエリ文字列から適切な NameValueCollection を簡単に取得できます。

NameValueCollection queryStringValues =
    HttpUtility.ParseQueryString(HttpContext.Current.Request.Query.ToLower());

string value = queryStringValues["my_key"];

コードではStreamReader、ストリームを読み取り、これを という文字列変数に割り当てますcontents。ただし、値を文字列に割り当てると、a実際contextにはHttpContext.Current. 次に、Requestオブジェクトを として使用しますNameValueCollection。そのようなコレクションにアクセスするRequestと、 POST と GET の両方のパラメーターが検索され、 と の両方がチェックさRequest.FormれますRequest.QueryString

HTTP リクエスト パイプラインのさらに上の何かがリクエストの途中で変更を加えない限り、パラメータが失われることはありません。FiddlerCharlesなどのプロキシ ツールを使用して、要求がブラウザーを離れるときに検査します。

于 2010-03-26T17:05:27.727 に答える