为什么UriKind有选择A:选择B:选择A |乙

时间:2014-05-01 18:29:20

标签: c# uri

为什么URIKind

AbsoluteRelativeRelativeOrAbsolute

为什么不总是使用RelativeOrAbsolute来防止代码爆炸?

2 个答案:

答案 0 :(得分:3)

因为下游代码可能正在期待其中一个。例如,如果您的代码使用绝对基URI http://example.com/foo/,并且您希望用户输入某个资源的路径,则需要相对URI。您不希望他们输入http://afu.com/myname/home,因为当您尝试使用用户输入的值时,您最终会得到错误的路径;或2)尝试创建URI" http://example.com/foo/htta://afu.com/myname/home"。

时出错

如果您期望绝对URI并且某人为您提供相对URI,则会发生同样的事情。如果您没有定义的基本URI,那么该相对URI对您没有任何好处。

你可以防止代码中的爆炸"在用户输入时间,但是对于其他人(也许是你)稍后清理会造成更糟糕的问题。这三个值 - 绝对值,相对值,不确定值 - 让您决定什么是有效的,并允许您在输入错误数据后立即拒绝错误数据。

答案 1 :(得分:1)

如果查看UriKind的文档,您会看到:

  

为Uri.IsWellFormedUriString定义Uris的种类(String,   UriKind)和几种Uri.Uri方法。

它使您能够区分绝对和相对URI。

现在考虑一个示例,您希望用户只输入绝对URI并验证它是否格式正确。然后你会做:

string inputUri = "/index.html)";
bool ifValid = Uri.IsWellFormedUriString(inputUri, UriKind.Absolute);

如果只有RelativeOrAbsolute,则上述内容将返回true。