爲什麼URIKind
有爲什麼UriKind有選擇A:選擇B:選擇A |乙
Absolute
,Relative
,RelativeOrAbsolute
。
爲什麼不總是使用RelativeOrAbsolute
來防止代碼中的爆炸?
爲什麼URIKind
有爲什麼UriKind有選擇A:選擇B:選擇A |乙
Absolute
,Relative
,RelativeOrAbsolute
。
爲什麼不總是使用RelativeOrAbsolute
來防止代碼中的爆炸?
如果你看看UriKind的文檔,你會看到:
定義種的URI的Uri.IsWellFormedUriString(字符串, UriKind)和幾個Uri.Uri方法。
它使您能夠區分絕對URI和相對URI。
現在考慮一個例子,您希望用戶只輸入絕對URI並驗證它是否格式正確。然後,你會做什麼:
string inputUri = "/index.html)";
bool ifValid = Uri.IsWellFormedUriString(inputUri, UriKind.Absolute);
如果只有RelativeOrAbsolute
然後上面會返回true。
因爲下游代碼可能會期待其中一個或另一個。例如,如果您的代碼使用的絕對基本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對你沒有任何好處。
您會在用戶輸入時「防止代碼中的爆炸」,但會讓其他人(也許是您)在稍後進行清理時遇到更嚴重的問題。這三個值 - 絕對的,相對的,不確定的 - 讓您決定什麼是有效的,並允許您在輸入錯誤數據後立即拒絕錯誤數據。
沒錯。它可以讓你提前失敗 - 在發生錯誤的地方失敗,而不是在以後。這通常是一個很好的原則,因爲a)你更可能會有異常而不是潛在的危險和沉默的不良行爲,b)它會從堆棧跟蹤或其他簡單的任務中進行調試,因爲你知道實際發生故障的位置。 –