私は最近、パラメータで非ASCII文字を検出した場合、そのUrlHelper.IsLocalUrl
メソッドは常にを返すことを検出しました。false
url
例:
var isLocal = UrlHelper.IsLocalUrl("контакты"); //false
それはバグですか、それとも「設計による」ですか?
私は最近、パラメータで非ASCII文字を検出した場合、そのUrlHelper.IsLocalUrl
メソッドは常にを返すことを検出しました。false
url
例:
var isLocal = UrlHelper.IsLocalUrl("контакты"); //false
それはバグですか、それとも「設計による」ですか?
利用可能な最新の実装は、これらの条件をチェックしています。
"/"
が続きません"/"
"\"
"~"
その後に続く"/"
"/"
したがって、このメソッドに渡されるすべてのURLは、またはで始まる必要があり"~/"
ます。
また、不思議に思うかもしれませんが、現在のホストを考慮せず、http
たとえばのようなスキームをチェックしません。
更新:http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/600963a4df15#src/System.Web.WebPages/RequestExtensions.cs
で使用される実装へのリンクは次のとおりです。UrlHelper.IsLocalUrl
おそらく、RFCのURLは、予約文字を使用してUS-ASCIIコードセットによって定義されているためです。
ここでURL仕様について読むことができます:http ://www.ietf.org/rfc/rfc1738.txt
そして、上記のサイト/ドキュメントからの引用:
URLは、US-ASCIIコード化文字セットのグラフィック印刷可能な文字でのみ書き込まれます。オクテット80-FF16進数はUS-ASCIIでは使用されず、オクテット00-1Fおよび7F16進数は制御文字を表します。これらはエンコードする必要があります。
つまり、私の推測は「設計による」ものです。
注:RFCは、URLなどの一部のテクノロジーの標準を設定するIETFによって設定されます。