2014-07-24 14 views
1

我試圖驗證表示一個url的字符串是相對的,但它似乎Uri.TryCreate()將接受任何url沒有協議作爲相對(即:www.domain.com/something /else.aspx)。但我只需要/something/else.aspx/驗證該字符串是相對url不工作

例如,當試圖在第9行獲得uri.PathAndQuery時,此測試字符串將始終引發異常。儘管TryCreate()返回true。

string test = "/something/else.aspx"; 
bool isValid; 
var url = getPathAndQuery(test, out isValid); 

private string getPathAndQuery(string url, out bool isValid) { 
    Uri uri; 
    isValid = Uri.TryCreate(url, UriKind.Relative, out uri); 
    try { 
     return isValid ? uri.PathAndQuery : string.Empty; 
    } catch (Exception e) { 
     isValid = false; 
     return string.Empty; 
    } 
} 

實施例的輸入/輸出:

輸入:/something/else.aspx ==>輸出:/something/else.aspx

輸入:www.domain.com/something /else.aspx ==>輸出:/something/else.aspx

輸入:http://www.domain.com/something/else.aspx ==>輸出中:的String.Empty

鑑於url的相對路徑,我如何驗證它確實是相對的,並在用戶已經通過域的情況下獲取路徑和查詢?

+0

很容易驗證它是否是相對的,但只獲取可能包含該域的url的路徑和查詢會有點困難。我會怎麼做呢? – bflemi3

+0

您能否包含一些示例輸入和預期輸出?如果路徑是相對的,應該返回多少路徑? – Douglas

回答

0

PathAndQuery返回的路徑是always an absolute path,所以它不適用於相對路徑。

+1

但問題是如何確保在使用'PathAndQuery'之前是絕對路徑。我認爲'IsAbsoluteUri'有幫助。 –

+0

它永遠不會是絕對的。整個目的是隻允許相關的網址。 – bflemi3

+0

問題似乎是,您無法從相對網址獲取完整路徑,因爲只有在相對網址與基本網址結合後才能獲取完整路徑。 – Douglas