很抱歉,如果已经回答了这个问题(我在搜索时找不到它),如果您传递了无效的网址值,例如“http://http://helloworld”,则应该在c#中为Uri.IsWellFormedUriString返回false。
但是,它返回true(至少使用.Net Framework 4.5)。我想知道将其视为格式良好的Uri字符串背后的逻辑。 或者这是一个错误?
提前致谢!
答案 0 :(得分:0)
这不是一个错误。 Uri.IsWellFormedUriString
没有验证uri的格式,因为文档提到它关于字符转义的问题:
通过尝试使用字符串构造URI并且确保字符串不需要进一步转义来指示字符串是否格式正确。
如果要验证格式,可以使用Uri.TryCreate
方法。
答案 1 :(得分:0)
你可以阅读关于这个=> https://msdn.microsoft.com/en-us/library/system.uri.iswellformeduristring(v=vs.110).aspx
与IsWellFormedUriString()
建议的名称一样,它仅检查格式正确的URI string
,并且字符串中 HTTP 2次不会导致任何差异。
答案 2 :(得分:0)
来自文档
从.NET 4.5开始,无论是否启用了IRI或IDN,字符串始终被认为是符合RFC 3986和RFC 3987的格式。
RFC 3986
和3987
从未说过路径不能包含
://
实际上,如果您向下滚动到描述错误的文档的备注部分
字符串是绝对URI,在路径前缺少斜杠。
file://c:/directory/filename
暗示
file:///c:/directory/filename
在RFC 3986和3987下被视为有效的Uri。如果您使用http替换文件但在标准下仍然有效,它看起来像无效的Uri。