新生鳩丸掲示板♯

bakera.jp > 新生鳩丸掲示板♯ > スレッド内全記事表示 (記事 4962 からのスレッド)

スレッド内全記事表示 (記事 4962 からのスレッド)

[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)

最近の日記

関わった本など