2016-10-26 4 views
0

これは私のASHXです。リクエストURLから複数のパラメータを取得するファイルはhttpcontextです。正しく動作しますが、ハッシュURLを介してテキストパラメータの(#)値を取得します。別のパラメータであるFLOWの値を取っていません(Textパラメータの隣)。 ASHXファイル内の複数の値を持つURLからシャープ記号(#)をキャッチする方法

だからそれがために働いている:

http://localhost:10326/ussd.ashx?user=MSL&pass=MSL663055&tid=65506&msisdn=8801520101525&text=***3333**&flow=begin&momt=mo 

そして、それはのために働いていません。

http://localhost:10326/ussd.ashx?user=MSL&pass=MSL663055&tid=65506&msisdn=8801520101525&text=***3333#**&flow=begin&momt=mo 

私ASHXファイル:あなたのパラメータ値をエンコードするURIに必要

public void ProcessRequest(HttpContext context) 
{ 
    HttpRequest httpRequest = context.Request; 
    string user = httpRequest.QueryString["user"].ToString(); 
    string pass = httpRequest.QueryString["pass"].ToString(); 
    string tid = httpRequest.QueryString["tid"].ToString(); 
    string msisdn = httpRequest.QueryString["msisdn"].ToString(); 
    string text = httpRequest.QueryString["text"].ToString(); 
    flow = httpRequest.QueryString["flow"].ToString(); 
    HttpContext.Current.Session["user"] = user; 
    HttpContext.Current.Session["pass"] = pass; 
    HttpContext.Current.Session["tid"] = tid; 
    HttpContext.Current.Session["msisdn"] = msisdn; 
    HttpContext.Current.Session["text"] = text; 
    HttpContext.Current.Session["flow"] = flow; 

答えて

2

それらがURLに追加される前にこのようにして、サーバはURLの一部として含まれているときに独自の意味を持つ '#'などの安全でない文字で混乱することはありません。 RFC 3986 Section 2を参照してください。

JavaScriptを使用して送信されたデータをエンコードする方法の例として、Encode URL in JavaScriptを参照してください。 URL内のデータを送信するものは何でも、エンコーディングを行う必要があります。要求がサーバーに到達したら、あまりできることはありません。あなたのURLがどのように作成されているかを知らなければ、私はもっと多くを提供することはできません。

簡潔に言えば、お客様のクライアントコードに問題があり、お客様のASHXファイルではありません。

+1

正しいですが、URLエンコーディングの機能は.Net: 'Httputility.UrlEncode()'、Javascript: 'encodeURI()'または 'encodeURIComponent()'です。 – par

+0

セクション3は素晴らしい[ASCIIグラフ](https:// tools.ietf.org/html/rfc3986#section-3)、断片を含むURI部分を表示します –

関連する問題