2012-03-29 15 views
1

私は奇妙な問題があります。私はパラメータの1つとしてURLを受け取るはずのコントローラを持っています。私はURLをコード化する、とのようなコントローラを呼び出すしようとしています。しかしURLエンコードされたURLをパラメータとしてコントローラに渡す

http://www.mysite.com/dowork/1/http%3a%2f%2fwww.otherurl.com

を、私は

潜在的に危険なRequest.Path値がクライアントから検出されたエラーを(取得しています:) 。

何がありますか?検証を無効にすることなくこれを処理する方法はありますか?

+0

コントローラの値の取得方法を表示 –

+0

コントローラのパラメータのひとつです。私はルーティングモジュールに残りをさせています。 –

+0

興味深いことに、従来のクエリ文字列を使用すると、この問題は発生しません。 –

答えて

2

それは.NET 4.0であれば、あなたがこの設定を編集することができます。

<system.web> 
    <httpRuntime requestPathInvalidCharacters="&lt;,&gt;,%,&amp;,:,\,?" /> 
</system.web> 

あなたがこれを編集したくない場合は、さらにあなたの受信URLをエンコードすることができます - (危険な交換のようなカスタムエンコーディングを使用コントローラに送信する前に、可能であればbase64エンコーディングまたはプロトコルパートを省略してください(http://をドロップすることも可能です。その場合、どのように渡すべきか考える必要があります)。

0

クエリ文字列パラメータ(?path = ....)として渡すと、問題が回避されますが、文字はパスの一部としてのみ不正です。

パスの一部としてデータを渡す必要がある場合は、文字列を16進数の値の範囲などに変換するなど、別の方法でエンコードする必要があります。

関連する問題