2013-11-29 54 views
9

我們有一個模板網址,如:更換{X}的字符串的標記

http://api.example.com/sale?auth_user=xxxxx&auth_pass=xxxxx&networkid={networkid}&category=b2c&country=IT&pageid={pageid}&programid=133&saleid=1&m={master}&optinfo={optinfo}&publisher={publisher}&msisdn={userId} 

,我對這些常令牌值。如何在C#中替換所有這些令牌?

+1

查一查'string.Replace' MSDN上。 – Blorgbeard

+0

這個網址你想存儲在某處併發送它,或者它是在你的請求? –

+0

[C#中的命名字符串格式化]的可能重複(http://stackoverflow.com/questions/159017/named-string-formatting-in-c-sharp) – Oliver

回答

9

一個簡單的方法是使用一個foreachDictionaryString.Replace

var values = new Dictionary<string, string> { 
    { "{networkid}", "WHEEE!!" } 
    // etc. 
}; 
var url = "http://api.example.com/sale?auth_user=xxxxx&auth_pass=xxxxx&networkid={networkid}&category=b2c&country=IT&pageid={pageid}&programid=133&saleid=1&m={master}&optinfo={optinfo}&publisher={publisher}&msisdn={userId}"; 

foreach(var key in values.Keys){ 
    url = url.Replace(key,values[key]); 
} 
+1

不錯的方式來借我的替換值;-)好吧,這很容易理解,所以+1。 – user2864740

5

我猜你試圖用url替換你的值。這可以使用C#HttpUtility.ParseQueryString

var _myUrl = System.Web.HttpUtility.ParseQueryString(Request.RawUrl); 

讀取參數從您的查詢字符串

string value1 = _myUrl ["networkid"]; 

獲取CURRENTURL寫入一個值的查詢字符串對象來完成。

_myUrl ["networkid"] = "Your Value"; 

,然後終於輪到它放回URL

var _yourURIBuilder= new UriBuilder(_myUrl); 
_myUrl = _yourURIBuilder.ToString(); 
7

還有就是在.NET中「與字典中的值改爲」沒有標準的方式。儘管模板引擎有號碼,但爲這樣的操作編寫小型解決方案並不困難。這裏是一個運行在LINQPad並利用Regular Expression with a Match Evaluator的例子。

結果是一個URL, 確保所有提供的值爲correctly encoded是來電者的責任。我建議適當地使用Uri.EscapeDataString ..但是確保不要雙重編碼,如果在別處處理的話。

此外,沒有找到替換時應該做什麼的規則應該根據需要量身定製。如果未找到替換項應與查詢字符串鍵完全消除,則以下操作可將正則表達式擴展爲@"\w+=({\w+})",以便還可以捕獲此特定模板情況中的參數項。

string ReplaceUsingDictionary (string src, IDictionary<string, object> replacements) { 
    return Regex.Replace(src, @"{(\w+)}", (m) => { 
     object replacement; 
     var key = m.Groups[1].Value; 
     if (replacements.TryGetValue(key, out replacement)) { 
      return Convert.ToString(replacement); 
     } else { 
      return m.Groups[0].Value; 
     } 
    }); 
} 

void Main() 
{ 
    var replacements = new Dictionary<string, object> { 
     { "networkid", "WHEEE!!" } 
     // etc. 
    }; 
    var src = "http://api.example.com/sale?auth_user=xxxxx&auth_pass=xxxxx&networkid={networkid}&category=b2c&country=IT&pageid={pageid}&programid=133&saleid=1&m={master}&optinfo={optinfo}&publisher={publisher}&msisdn={userId}"; 
    var res = ReplaceUsingDictionary(src, replacements); 

    // -> "http://api.example.com/sale?..&networkid=WHEEE!!&..&pageid={pageid}&.. 
    res.Dump(); 
} 

更先進的技術,如反射和轉換,是可能的 - 但這些應該留給真正模板發動機。

2

您可以使用此阿洛斯使用LINQ

Dictionary<string, string> myVal = new Dictionary<string, string>(); 

myVal.Add("networkid", "1"); 
myVal.Add("pageid", "2"); 
myVal.Add("master", "3"); 
myVal.Add("optinfo", "4"); 
myVal.Add("publisher", "5"); 
myVal.Add("userId", "6"); 

string url = @"http://api.example.com/sale?auth_user=xxxxx&auth_pass=xxxxx&networkid={networkid}&category=b2c&country=IT&pageid={pageid}&programid=133&saleid=1&m={master}&optinfo={optinfo}&publisher={publisher}&msisdn={userId}"; 
myVal.Select(a => url = url.Replace(string.Concat("{", a.Key, "}"), a.Value)).ToList(); 

此行可以做你所需功能的

myVal.Select(a => url = url.Replace(string.Concat(「{」,a.Key,「}」),aV ALUE))ToList();