2012-07-05 63 views
0

我想使用控制檯應用程序輕鬆地將URL從PARAMS中分開,以便我可以對參數進行URL編碼。有沒有這樣簡單的類型?請記住,這是在Web服務器之外運行的。將url視爲c#對象,以便我可以拆分參數

該URL的格式是

E.G.

string url = "http://sitename/folder1/someweb.dll?RetrieveTestByDateTime?PatientID=1234&param2=blah blah blah"; 

於是我可以做

string finalUrl = "http://sitename/folder1/someweb.dll?RetriveTestByDateTime?PatientID=" + HttpUtility.UrlEncode(PatientIDValue) + HttpUtility.UrlEncode(param2Value); 

其次,是第二?有效?這些數據來自第三方應用。當然,這可以用正則表達式來完成,但我不喜歡使用它,因爲我們團隊中的大多數人都不知道正則表達式。

+0

你可以寫你自己的工具。 – 2012-07-05 21:13:29

+1

URL上的第二個'?'將被視爲第一個參數名稱的一部分。 – Oded 2012-07-05 21:19:30

回答

4

使用Uri類 - 將字符串url傳遞給構造函數,它將解析出不同的部分。

查詢將在Query財產,你可以很容易地使用SchemeAbsolutePath和編碼Query重建URL。

+0

我認爲Uri不能解決OP問題(或者可能是我誤解了他的問題)。 – 2012-07-05 21:18:26

+0

@SaeedAmiri - 我相信這正是OP所要求的。 – Oded 2012-07-05 21:23:41

+0

@Downvoter - 關注評論? – Oded 2012-07-05 21:23:51

0

首先你的URL結構不好

string url = "http://sitename/folder1/someweb.dll?RetrieveTestByDateTime?PatientID=1234&param2=blah blah blah"; 

應該

string url = "http://sitename/folder1/someweb.dll?RetrieveTestByDateTime&PatientID=1234&param2=blah blah blah"; 

可能的解決方案,我不是在開發環境,現在,所以這是從頭部。可能需要對代碼進行一些更改。

string url = "http://sitename/folder1/someweb.dll?RetrieveTestByDateTime&PatientID=1234&param2=blah blah blah"; 
var uri = new Uri(url); 
var queryString = uri.Query; 
NameValueCollection query = HttpUtility.ParseQueryString(queryString) 
query["PatientID"] = string.Concat(HttpUtility.UrlEncode(PatientIDValue), HttpUtility.UrlEncode(param2Value)); 

// Rebuild the querystring 
queryString = "?" + 
       string.Join("&", 
           Array.ConvertAll(query.AllKeys, 
               key => string.Format("{0}={1}", 
               HttpUtility.UrlEncode(key), 
               HttpUtility.UrlEncode(query[key])))); 
+0

該URL是從第三方Web服務輸入的。改變他們的URL沒有什麼意義(假設它有效)。 – 2012-07-05 21:33:42

+0

我認爲,Uri類應該自動解決這個問題。 – 2012-07-05 21:36:48

相關問題