规范化URI以使其与MakeRelativeUri一起正常工作

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并删除路径中的所有//?

der*_*eli 5

似乎用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)