C#中的Uri验证

时间:2017-01-09 21:01:06

标签: c# .net uri

我正在尝试按如下方式实现uri验证。

为了测试,我将url指定为空字符串"",并测试了以下代码,但它返回 True

我想知道我做错了什么/错过了什么?

var a = "";
if (Uri.IsWellFormedUriString(a, UriKind.RelativeOrAbsolute))
{
     Debug.WriteLine("True");

 }
 else
 {
     Debug.WriteLine("Error");
 }

2 个答案:

答案 0 :(得分:2)

空字符串是有效的相对URI。

答案 1 :(得分:1)

查看RFC2396关于URI的内容:

  

4.2。同文档参考

     

不包含URI的URI引用是对
的引用   目前的文件。换句话说,一个空的URI引用   文档被解释为对该文档开头的引用,   并且仅包含片段标识符的引用是引用
  到该文件的已识别片段。遍历这样的一个   引用不应导致额外的检索操作   但是,如果URI引用发生在始终为
的上下文中   旨在产生新的请求,如HTML的FORM的情况   element,则空URI引用表示
的基URI   当前文档,在转换时应该被该URI替换   进入请求。

随便看看MSDN说的是什么:

  

根据RFC 2396,该字符串被认为是格式良好的   默认情况下为RFC 2732 。如果国际资源标识符(IRI)   或启用国际化域名(IDN)解析,即字符串   根据RFC 3986和RFC,它被认为是格式良好的   3987

那么如何处理空的URI场景?

答案取决于你。虽然可以将空URI视为有效,但可能在您的方案中无效。因此,您需要在if语句中添加条件:

if (!string.IsNullOrEmpty(a) && Uri.IsWellFormedUriString(a, UriKind.RelativeOrAbsolute))
{
}