dr.*_*vil 5 .net vb.net uri normalization
Dim x AS New URI("http://www.example.com/test//test.asp")
Dim rel AS New URI("http://www.example.com/xxx/xxx.asp")
Console.Writeline(x.MakeRelativeUri(rel).Tostring())
Run Code Online (Sandbox Code Playgroud)
在这里输出是:
../../xxx/xxx.asp
Run Code Online (Sandbox Code Playgroud)
哪个看起来正确几乎所有的Web服务器都将处理以下两个相同的请求:
http://www.example.com/test//test.asp
http://www.example.com/test/test.asp
Run Code Online (Sandbox Code Playgroud)
修复此行为的最佳方法是使用任何API来执行此操作,还是手动创建新URI并删除路径中的所有//?
似乎用LocalPath部分中的一个斜杠替换所有多斜线是最好的解决方案.即使将URL传递给ASP.net,IIS也会这样做.
以下代码将起到作用.
x = new Uri(string.Format("{0}://{1}:{2}{3}{4}", x.Scheme, x.Host, x.Port, Regex.Replace(x.LocalPath, @"(?<!\:)/{2,}", "/"), x.Query));
Run Code Online (Sandbox Code Playgroud)