2014-05-01 181 views

回答

1

如果你看看UriKind的文档,你会看到:

定义种的URI的Uri.IsWellFormedUriString(字符串, UriKind)和几个Uri.Uri方法。

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

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

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

如果只有RelativeOrAbsolute然后上面会返回true。

3

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

如果您期待绝对URI并且有人给您一个相对URI,则会发生同样的事情。如果你没有定义的基本URI,那么这个相对URI对你没有任何好处。

您会在用户输入时“防止代码中的爆炸”,但会让其他人(也许是您)在稍后进行清理时遇到更严重的问题。这三个值 - 绝对的,相对的,不确定的 - 让您决定什么是有效的,并允许您在输入错误数据后立即拒绝错误数据。

+0

没错。它可以让你提前失败 - 在发生错误的地方失败,而不是在以后。这通常是一个很好的原则,因为a)你更可能会有异常而不是潜在的危险和沉默的不良行为,b)它会从堆栈跟踪或其他简单的任务中进行调试,因为你知道实际发生故障的位置。 –

相关问题