代码之家  ›  专栏  ›  技术社区  ›  dr. evil

规范化URI以使其与MakeRelativeUri正确工作

  •  5
  • dr. evil  · 技术社区  · 16 年前
    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())
    

    这里的输出是:

    ../../xxx/xxx.asp
    

    http://www.example.com/test//test.asp
    http://www.example.com/test/test.asp
    

    修复此行为的最佳方法是使用API,还是手动创建新URI并删除路径中的所有//?

    2 回复  |  直到 14 年前
        1
  •  5
  •   dereli    14 年前

    下面的代码将完成此任务。

    x = new Uri(string.Format("{0}://{1}:{2}{3}{4}", x.Scheme, x.Host, x.Port, Regex.Replace(x.LocalPath, @"(?<!\:)/{2,}", "/"), x.Query));
    
        2
  •  0
  •   Mikael Svenson    16 年前

    首先,您的代码不是C,而是VB,因此标记是错误的。

    您可以改用这段代码吗?因为//位于baseuri中,将被丢弃,所以这段代码给出了“正确”的url?

    var x2 = new Uri(x, rel);
    

    x = new Uri(Regex.Replace(x.OriginalString, "[^:]//", "/"));
    
    推荐文章