2010-12-31 14 views
5

私のウェブサイトのURLにアスタリスク(*)を付けることができません。私はASP.NET MVC 2と.NET 4.0を実行しています。ここでURLにアスタリスクを許可する

は、問題を説明する例を示します

http://mysite.com/profile/view/Nice *

ユーザ名が*ニースで、ASP.NETは、不正な文字がURLであると言う:

Illegal characters in path. 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.ArgumentException: Illegal characters in path. 

私が試してみました私がオンラインで見たすべてのWeb.configメソッド:

<pages validateRequest="false"> 

<httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0" /> 

私の質問は次のとおりです。URLにアスタリスクを許可することはできますか?そうでない場合、アスタリスク(*)をエンコードできる.NETでのエンコード方法がありますか?

ありがとうございます!

+0

HTTPエンコーディングのルールについて理解していますか?そうでなければ、そこから始めてください。 – JasonTrue

+0

アスタリスクは予約文字なのでHTTPエンコーディングの一部ではないようです。しかし、それは解決策があるかどうか私の疑問に答えるものではありません。 – raRaRa

+0

あなた自身の質問に答えました。これはW3の予約文字です。もしあなたがそれを回避することができれば、それはあまり予約されていません。 –

答えて

2

解決方法は、クエリ文字列に変更することでした。

例えば:

http://mysite.com/profile/?user=username *

それだけで正常に動作するようですその方法。

アスタリスク(*)は予約済みの文字なので、ユーザー名には許可しないでください。しかし、これは私の問題を解決します。

5

アスタリスク(*)は特別な意味を持つ予約文字なので、URIでは間違って使用しないでください。代わりに、各ユーザー名をpercent encodeに入力してからURIに挿入する必要があります。

エンコード率の下では、アスタリスク文字は "%2A"になります。

ので、完全な、正しいURIは次のようになります。 http://example.com/profile/view/Nice%2A

%エンコードのユーザー名が自動的にあなたのために、元のユーザー名の文字列に翻訳する必要があります。

これにより、ユーザーがこれらのアドレスをコピーしてメールプログラムに貼り付けるときに、URIをサーバー側だけでなくクライアント側でも検証できるようになります。

たとえば、スタックオーバーフローは、安全なパーセントエンコードされたURI: http:// exampleを自動的にハイパーリンクします。 ます。http:// example.com/profile/?user=username*

アスタリスクが含まれていないCOM /プロファイル/ビュー/ニース%の2A

しかし、それは完全に安全ではないバージョンをハイパーリンクしません。スタックオーバーフローリンク - あなたのユーザーは間違ったページを終了してしまいます。

(申し訳ありませんが、私はこれを証明することはできません - 。 - 私は私の記事に含まれる2つのリンクに許可される)

あなたはそれを挿入する前には、常にパーセントエンコーディングデータによって自分自身にトラブルの多くを保存することができますURIに変換する。

+0

.NETでこれを実行するために一般的に使用される方法は、UrlEncodeです。http://msdn.microsoft.com/en-us/library/zttxte6w.aspx – AaronSieb

関連する問題