3

アンパサンドを含むクエリ文字列パラメータ値があります。たとえば、パラメーターの有効な値は次のようになります。

a & b

パラメータを含む URL を生成するときは、System.Web.HTTPUtility.UrlEncode() を使用して、各要素を URL フレンドリーにします。(正しく) 次のような URL が表示されます。

http://example.com/foo?bar=a+%26b

問題は、ASP.NET の Request オブジェクトが (エンコードされた) アンパサンドをクエリ文字列パラメーターの区切り記号として解釈しているため、値が 2 つの部分に分割されていることです (最初の部分にはパラメーター名として「bar」があり、2 番目の部分には null 名があります)。 )。

ASP.NET は最初に URL を URL デコードしてから、クエリ文字列を解析するときにそれを使用しているようです。

これを回避する最善の方法は何ですか?


更新: 問題は、ASP.NET 自体ではなく、URLRewriter (サードパーティのプラグイン) にかかっています。これを反映するためにタイトルを変更しましたが、問題の詳細がわかるまで、残りの質問テキストはそのままにしておきます。

4

4 に答える 4

1

男、私は同じボートであなたと一緒にいます、私は何時間も何時間も問題を理解しようと努力してきました、そしてあなたが言ったように、それは奇妙な文字やUTF-8コードを含む通常のリンクとして両方のバグです文字はasp.netによって正常に解析されます。

MVC.routingに切り替える必要があると思います

更新:信じられないかもしれませんが、問題は非常に奇妙であることがわかりました。IISの場合、Visual Studio Devサーバーからページを起動してみてください。Unicode文字は問題なく解析されますが、IISからページを起動すると7それはあなたに????を与えるでしょう 文字。

体がここで光を遮ることを願っています

于 2009-03-15T07:00:37.573 に答える
1

%26 と '&' は Web サーバーにとってまったく同じ意味であると考えていたので、これは予想される動作です。Urlencode は URL のエンコード用であり、クエリ文字列のエンコード用ではありません。

... ちょっと待って ... Google で abc&def を検索してみてください。

http://www.google.com.au/search?q=abc%26def

したがって、クエリ文字列正しいです。%26 はリテラル アンパサンドです。うーん、その通りです。バグのようですね。%26 の代わりに & を使用するにはどうすればよいですか?

興味深い読み物:

http://www.stylusstudio.com/xsllist/200104/post11060.html

于 2009-03-18T05:48:16.623 に答える
0

URLRewriter は名前のないパラメーター (null 名) に問題があると思います。
同様の問題がありました。名前のないパラメーターに (ダミーの) 名前を付けると、すべてが期待どおりに機能しました。

于 2010-08-17T13:13:13.703 に答える
0

UrlRewritingNet.UrlRewriteに切り替えても、明らかに同じバグがあるため、役に立ちませんでした。結局、ASP.NET と関係があるのではないかと考えています。

于 2009-02-09T22:55:31.483 に答える