2017-07-17 104 views
1

我沒有Request,我只有一個url字符串。此外,該網址可以是相對或絕對的。而且由於UriUriBuilder不支持相關網址,因此我可能必須手動執行此操作,除非有一個我不知道的技巧。這個方法在我的項目中可能會用到一千多行代碼,這就是爲什麼我想正確地做到這一點。添加查詢字符串如果不存在請求

下面的代碼將打破,如果一個相對URL傳遞:

public static string AddQueryStringIfNotExists(string url, string parameter, string value) 
{ 
    var uriBuilder = new UriBuilder(url); 
    var query = HttpUtility.ParseQueryString(uriBuilder.Query); 
    if (query[parameter] == null) 
    { 
     query[parameter] = value; 
     uriBuilder.Query = query.ToString(); 
    } 
    return uriBuilder.ToString(); 
} 

附:我很好,通過檢查我的參數是否出現在第一個?後面,但是這需要處理幾個邊緣情況,我試圖避免的情況(如參數名稱包含在另一個參數中)

回答

1

只需檢查您的網址是絕對的。如果它沒有將其轉換爲絕對網址。

然後使用HttpUtility.ParseQueryString解析查詢字符串並在需要時添加您的參數。

將UriBuilder轉換回Uri。

如果輸入是絕對的Uri返回整個Uri。如果輸入是相對的,則返回相對的uri。

private static Uri dummy = new Uri("http://dummy/"); 
public static string AddQueryStringIfNotExists(string url, string parameter, string value) 
{ 
    var uri = new Uri(url, UriKind.RelativeOrAbsolute); 
    var uriBuilder = uri.IsAbsoluteUri ? new UriBuilder(url) : new UriBuilder(new Uri(dummy, url)); 

    var query = HttpUtility.ParseQueryString(uriBuilder.Query); 
    if (query[parameter] == null) 
    { 
     query[parameter] = value; 
     uriBuilder.Query = query.ToString(); 
    } 
    return uri.IsAbsoluteUri ? uriBuilder.ToString() : dummy.MakeRelativeUri(new Uri(uriBuilder.ToString())).ToString(); 
} 

例子:

string s = AddQueryStringIfNotExists("somedirectory/mypage/html?something=1", "somethingelse", "1"); 

輸出:

somedirectory /我的空間/ HTML的東西= 1 & somethingelse = 1

1

There可以是一個簡單的幫手,將相對URL轉換爲絕對:

public static string ToAbsoluteUrl(this string url, string domain) 
{ 
    var result = url.StartsWith("http", StringComparison.OrdinalIgnoreCase) ? url : domain + url; 
    return result; 
} 

url = "/page?skip=0"; 
url = url.ToAbsoluteUrl("https://example.com"); // https://example.com/page?skip=0 
var uriBuilder = new UriBuilder(url); 
+0

我想避免的絕對URL,因爲我最終會使用'Response.Redirect'中的輸出來自動處理相對的URL。此外,每當我有一個相對URL需要全面掃描我的項目時,我必須有選擇地通過域。 – yazanpro

+0

如果它是相對的,然後將其轉換爲絕對,追加您的查詢,然後返回相對部分的網址。否則按照你的方式處理它。 –

相關問題