ASP.NETでURLEncodedまたはパーセント文字を含むクエリ文字列を取得する方法
-
08-07-2019 - |
質問
ASP.NETでクエリ文字列がUrlEncodedまたはパーセント文字である場合に、Requestオブジェクトから実際のクエリ文字列を取得する方法
基本的に、 Default.aspx?p =%b4
のようなUrlがある場合、"%b4"が入力された文字列を取得するにはどうすればよいですか?
Request.QueryString [" p"]
は、印刷できない文字を返します。
Request.RawUrl
はDefault.aspx?p =%ufffd"
Request.Url.AbsoluteUri
はDefault.aspx?p =%EF%BF%BDを返します
「%b4」を取得するにはどうすればよいですか?戻る?
解決
これをさらに掘り下げて、何が原因であるかを知っていると信じています。HTTPクライアントが、適切にURLエンコードされていないURLをサーバーに送信しています。具体的には、URLに無効な文字が含まれています。
再現するには、URLの最後に次をIE8に貼り付けます。 default.aspx?p = ´
回線上を流れるバイトを調べると(たとえば、フィドラーを使用)、実際の16進B4文字は、URLでクライアントからサーバーに送信されています。 URLは0x80未満の文字コードに制限されているため、これはURL内の不正な文字です(0x80より大きい文字コードはパーセントエスケープする必要があります)。
したがって、クライアントは無効な文字を渡し、サーバーは(正しく)偽の文字を Unicode置換文字(U + 0FFD)。これは、同等の文字が見つからないときに発生することですローカルエンコーディングで。
わかりました、これはIEのバグです。 Firefoxに同じURLを入力すると、FirefoxはURLを適切にエンコードします( ´ではなく%b4として)。また、問題はIEのアドレスバーに無効な文字を手動で貼り付けた場合にのみ発生することに注意してください。同じ文字がリンクに存在する場合、IEはURLを適切にエンコードしているように見えます(少なくともテストした場合)。
だから、この偽のURLを誰に送信しているのかを把握し、URLのエンコードを適切に開始するように指示する必要があります!
他のヒント
Asp.netは、Request.Querystring [" key"]を実行すると、自動的にURLデコードを行います。もう一度エンコードするだけです。
HttpUtility.UrlEncode(Request.QueryString["p"])
HttpContext.Current.Request.ServerVariables["QUERY_STRING"]
RAWクエリ文字列を返します
同じ問題がありました。 javascript" escape( 'text%text')"を追加するだけで解決しました。クエリ文字列を構築中!