我正在尝试按如下方式实现uri验证。
为了测试,我将url
指定为空字符串""
,并测试了以下代码,但它返回 True 。
我想知道我做错了什么/错过了什么?
var a = "";
if (Uri.IsWellFormedUriString(a, UriKind.RelativeOrAbsolute))
{
Debug.WriteLine("True");
}
else
{
Debug.WriteLine("Error");
}
答案 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视为有效,但可能在您的方案中无效。因此,您需要在if
语句中添加条件:
if (!string.IsNullOrEmpty(a) && Uri.IsWellFormedUriString(a, UriKind.RelativeOrAbsolute))
{
}