Uri.IsWellFormedUriString()奇怪的行为

时间:2014-08-12 18:01:54

标签: c# .net

我最近一直致力于一个项目,我必须检查一堆URL的有效性。 URL实际上不必存在,它们必须合理。为此,我打算使用库中的Uri.IsWellFormedUri(避免修改正则表达式)。

但是,我注意到有些网址被认为是有缺陷的,尽管它们对我来说似乎是正确的。具体来说,问题似乎来自URL的编码部分百分比。下面是一个显示示例的小程序:

class Program
{
    static void Main(string[] args)
    {
        string uriBase = "http://example.com/share.html?title=";
        string leftEncoded = "ab%C3%BCde";
        string rightEncoded = "ef%20%C7%20ghij";

        Console.WriteLine("Now testing if uri is well formed:");
        Console.WriteLine("Combined URI:    " + Uri.IsWellFormedUriString(uriBase + leftEncoded + rightEncoded, UriKind.RelativeOrAbsolute));
        Console.WriteLine("Only left part:  " + Uri.IsWellFormedUriString(uriBase + leftEncoded, UriKind.RelativeOrAbsolute));
        Console.WriteLine("Only right part: " + Uri.IsWellFormedUriString(uriBase + rightEncoded, UriKind.RelativeOrAbsolute));

        Console.ReadLine();
    }
}

该程序提供以下输出:

Now testing if uri is well formed:
Combined URI:    False
Only left part:  True
Only right part: True

为什么长网址不被接受为正确?此字符串的“标题”部分仅是自身接受的部分的串联。据我所知,这个URL确实可以正常工作,因此应该有效。

非常感谢任何帮助!

0 个答案:

没有答案
相关问题