加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Uri.IsWellFormedUriString需要更新吗?

发布时间:2020-12-15 03:53:29 所属栏目:百科 来源:网络整理
导读:我想我可能在Uri.IsWellFormedUriString方法中发现了一个错误,可能是因为它只符合 RFC 2396和 RFC 2732标准,而不是新的 RFC 3986,这使得前面提到的两个过时了. 我认为发生的是任何非us-ascii字符都会使它失败,所以带有?,?,?或?等字符的url会使它返回false.由
我想我可能在Uri.IsWellFormedUriString方法中发现了一个错误,可能是因为它只符合 RFC 2396和 RFC 2732标准,而不是新的 RFC 3986,这使得前面提到的两个过时了.

我认为发生的是任何非us-ascii字符都会使它失败,所以带有?,?,?或?等字符的url会使它返回false.由于现在允许这些类型的字符(wikipedia使用它们),我认为Uri.IsWellFormedUriString应该接受它们.下面的正则表达式取自RFC 3986.

你怎么看? Uri课程应该更新吗?

无论如何这里是一些显示错误的示例代码:

static void Main(string[] args)
        {
            var urls = new []
                           {
                               @"/aaa/bbb/cccd",@"/aaa/bbb/ccc?",@"/aaa/bbb/ccc?",@"/aaa/bbb/ccc?"
                           };

            var regex = new Regex(@"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(?([^#]*))?(#(.*))?");

            Debug.WriteLine("");

            foreach (var url in urls)
            {
                if (Uri.IsWellFormedUriString(url,UriKind.Relative))
                    Debug.WriteLine(url + " is a wellformed Uri");

                if (regex.IsMatch(url))
                    Debug.WriteLine(url + " passed the Regex");

                Debug.WriteLine("");
            }
}

输出:

/aaa/bbb/cccd is a wellformed Uri
/aaa/bbb/cccd passed the Regex

/aaa/bbb/ccc? passed the Regex

/aaa/bbb/ccc? passed the Regex

/aaa/bbb/ccc? passed the Regex

解决方法

您必须更改配置以支持RFC 3986和RFC 3987.
这是你必须做的配置:
<configuration>
  <uri>
  <idn enabled="All" />
  <iriParsing enabled="true" />
  </uri>
</configuration>

取自这里http://msdn.microsoft.com/en-us/library/system.uri.aspx#CodeSnippetContainerCode5

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读