「System.Uriに%2fが入らない」へのコメント
「水無月ばけらのえび日記 : System.Uriに%2fが入らない」について、5件のコメントが書かれています。
[4962] Re: 「System.Uriに%2fが入らない」
yamagata (2008年8月25日 10時29分)
new Uri する時に、dontEscapeオプションを True にすれば・・・
↓
あれ? 実際にやってみたら旧形式だと警告される。。。
↓
警告で表示されるページを見に行ってもリンク切れ。どうしろと?
http://go.microsoft.com/fwlink/?linkid=14202
↓
ぐぐったら見覚えのあるページが出てきた:
http://bakera.jp/ebi/topic/364
↓
あれぇ?!(@_@; ←今ココ
[4963] Re: 「System.Uriに%2fが入らない」
ばけら (2008年8月25日 12時22分)
>new Uri する時に、dontEscapeオプションを True にすれば・・・
昔はそれで良かったのですけれど……。
>あれ? 実際にやってみたら旧形式だと警告される。。。
その警告、「警告されるが動作する」のなら警告を無視すれば良いのですが、なんと「警告されて、動作しない」のです。
true を渡しても無視されます。ひどい。
というわけで、昔と同じようには行かない罠が。
[4965] Re: 「System.Uriに%2fが入らない」
anonymous (2008年8月27日 3時51分)
Uri u = new Uri("http://example.com/?%2f%252f");
Console.WriteLine(u.GetComponents(UriComponents.AbsoluteUri, UriFormat.SafeUnescaped));
というのはだめですか?
[4967] Re: 「System.Uriに%2fが入らない」
isayan (2008年8月27日 14時43分)
System.UriBuilderで構築してもUri参照すると変換されてますね。
あと、すでによまれてるかもしれませんが、やっぱり過去にも議論があったようで。
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=2108448&SiteID=7
[4968] Re: 「System.Uriに%2fが入らない」
れい (2008年8月27日 17時18分)
おやゃ。
えび日記にMSDNの私の投稿が出るとは思いませんでした。
以下のコードで振る舞いを変更できます。
--ここから。
Private Const ConvertPathSlashes As Integer = &H400000
Private Const UnEscapeDotsAndSlashes As Integer = &H2000000
If m_registered Then Exit Sub
Dim permission1 As New System.Security.Permissions.ReflectionPermission(System.Security.Permissions.ReflectionPermissionFlag.AllFlags)
Dim permission2 As New System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityPermissionFlag.AllFlags)
permission1.Demand()
permission2.Demand()
Dim parserinfo As FieldInfo
Dim flaginfo As FieldInfo
Dim httpparser As UriParser
Dim flag As Integer
parserinfo = GetType(UriParser).GetField("HttpUri", BindingFlags.NonPublic Or BindingFlags.Static)
flaginfo = GetType(UriParser).GetField("m_Flags", BindingFlags.NonPublic Or BindingFlags.Instance)
httpparser = CType(parserinfo.GetValue(Nothing), UriParser)
flag = CInt(flaginfo.GetValue(httpparser))
flag = flag And (Not ConvertPathSlashes)
flag = flag And (Not UnEscapeDotsAndSlashes)
flaginfo.SetValue(httpparser, flag)
parserinfo = GetType(UriParser).GetField("HttpsUri", BindingFlags.NonPublic Or BindingFlags.Static)
flaginfo = GetType(UriParser).GetField("m_Flags", BindingFlags.NonPublic Or BindingFlags.Instance)
httpparser = CType(parserinfo.GetValue(Nothing), UriParser)
flag = CInt(flaginfo.GetValue(httpparser))
flag = flag And (Not ConvertPathSlashes)
flag = flag And (Not UnEscapeDotsAndSlashes)
flaginfo.SetValue(httpparser, flag)
「水無月ばけらのえび日記 : System.Uriに%2fが入らない」についてコメントを書く場合は、以下のフォームに記入してください。