2009-02-03 50 views
2

我有一個問題,公司使用一個業務跟蹤系統來捕獲用戶第一次訪問,並將它們重定向到他們試圖訪問的頁面,但是refferer網址附加... 現在,作爲引用URL帶有該人試圖訪問的網址(不問爲什麼,我不知道),它會導致我有每個值的重複。什麼是在C#中重複查詢查詢字符串的最快方法(ASP.net)

所以參觀這個...

home.aspx?測試=測試&測試2 = test2的

成爲

home.aspx?測試=測試&測試2 = test2的& referrerurl = home.aspx?test = test & test2 = test2

否w,引用URL的URL編碼將排序問題,但我更有可能被大猩猩調戲;所以問題的立場。 如何從.QueryString重複數據輸出?

目前我使用這個......

private string queryClean(string entity) 
{ 
    try 
    { 
     if(Request.QueryString["referrerUrl"] != null){ 
     string[] Split = entity.Split(new Char[] { ',' }); 
     string tmpValue = Convert.ToString(Split[0]); 

     return tmpValue; 
     }else{ return entity; } 
    } 
    catch (Exception cleanError) 
    { 
     errors.Text += "-clean-" + cleanError + "-endclean-"; 
     return entity; 
    } 

} 

(忽略try/catch語句,我們有應用程序級的錯誤醒目,但我仍然擺弄它)。

我使用C#.NET 2

感謝


[附加信息]

的reffererURL將永遠是字符串的結尾因此它可能是可以刪除這一點之後的所有查詢字符串?

我使用

string test = Convert.ToString(Request.QueryString); 
string[] tRSplit = Regex.Split(test, "&referrerUrl"); 
Response.Write(tRSplit[0]); 

,並試圖...

System.Collections.Generic.List<string> testb = new System.Collections.Generic.List<string>(Convert.ToString(Request.QueryString).Split('&')); 
      for (int i = 0; i < testb.Count; i++) 
      { 

       Response.Write(i +": "+ testb[i].ToString()+"<br><br>"); 
      } 

雙方仍然產生重複


我可以用Trim但有一個更清潔/更快實現這一目標的方式。

+1

「我更有可能被大猩猩調戲」,具有諷刺意味的是,你說這個帖子旁邊的廣告對我來說是黑猩猩,他們已經出來了! – 2009-02-03 17:43:45

+0

哈!可能是微軟猴子 – 2009-02-04 11:28:53

+0

只是出於好奇:爲什麼/如何URL編碼引用來解決這個問題?或者,也許我不明白什麼是URL編碼(我想用`%20`替換空間等等......)? – scherand 2010-03-30 07:12:05

回答

0

[實施例URL]

Default2.aspx?測試=測試& TEST2 = TEST2 & referrerURL = http://www.test.com/home.aspx?test=test&test=test

[這將產生]

測試=測試
測試= test
test2 = test2
r eferrerURL = http://www.test.com/home.aspx?test=test

[所以經過編輯的gustafc的答案的版本...]

//Capture the raw url 
    test = Request.RawUrl.ToString(); 
    //Set the start index as 1 after the query ? 
    int startTxt = (test.IndexOf("?") + 1); 
    //Find the number of characters between ? and &referrerURL 
    int countTxt = ((test.IndexOf("&referrerURL")-1) - test.IndexOf("?")); 
    //Capture the substring and split into a string array using & 
    string[] aTest = test.Substring(startTxt, countTxt).Split(new Char[] { '&' }); 

[運行測試產生以下]

-0〜測試=測試

-1〜test2 = test2

[這是我希望收到]

(出於完整性繼承人的簡單的語句)

for (int i = 0; i < aTest.Length; i++) 
    { 
     Response.Write("<br>-" + i + "~" + Convert.ToString(aTest[i]) + "<br>"); 
    } 
2

我假設你無法控制重定向,對吧?在那裏我自己,我很抱歉地說。你的問題在理論上是無法解決的,但是趨勢似乎是,那些沒有URI編碼參數的可愛的人只是把它們附加到URL中,所以你可以得到原始查詢字符串(來自request.RawUrL屬性),並且忽略所有的referrerUrl。它的對接醜陋,但基本上是:

if(Request.QueryString["referrerUrl"] != null) 
{ 
    string qs = request.RawUrl.Substring(request.RawUrl.IndexOf("?") + 1); 
    qs = qs.Substring(0, qs.IndexOf("referrerUrl")); 
    ReplaceQuerystring(qs); 
} 

ReplaceQuerystring現在收到的查詢字符串爲 「VAR1 =瓦拉& VAR2 = varB &」。只需在&符號上切斷它,在等號,URL解碼和存儲位置切斷每個部分(實際上,request.QueryString應該是可變的,所以這可能是一個選項)。至少,這是我做這件事的方式。爲了你,我希望有人想出了一個更好的解決辦法:)

3

像這樣的東西應該工作:

NameValueCollection fixedQueryString = new NameValueCollection(); 
foreach (string key in Request.QueryString.Keys) 
{ 
    string value = Request.QueryString[key]; 
    if(value.Contains(",")) 
    { 
    value = value.Split(',')[0]; 
    } 
    fixedQueryString.Add(key, value); 
} 

此代碼將創建一個新的NameValueCollection,我們重建的查詢字符串。然後我們檢查每個值的a,這通常表示一個值重複多次。例如url home.aspx?test = test & test2 = test2 & referrerurl = home.aspx?test = test & test2 = test2將爲查詢字符串值「test」生成值「test,test」。

0

下面的示例讀取所有的「電子郵件」查詢字符串參數,只需要首先通過讀取「email」字符串並將內容添加到名爲「email1」的新字符串,直到找到逗號。對新手來說非常簡單和容易使用。

string email = Request.QueryString["email"]; 
string email1 = ""; 
for(int i = 0; i < email.Length; i++) 
{ 
    if (email[i] != ',') 
    { 
     email1 += email[i].ToString(); 
    } 
    else 
    { 
     break; 
    } 
} 
email = email1; 
相關問題