2013-11-29 8 views
9

Wir haben eine Vorlage URL wie:Ersetzen Sie {x} Token in Strings

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} 

und ich habe Werte für diese Konstante Token. Wie können alle diese Token in C# ersetzt werden?

+1

nachschlagen 'string.Replace' auf msdn. – Blorgbeard

+0

ist diese URL, die Sie irgendwo speichern und senden möchten oder kommt es in Ihrer Anfrage? –

+0

mögliches Duplikat von [Benannte Zeichenfolgenformatierung in C#] (http://stackoverflow.com/questions/159017/named-string-formatting-in-c-sharp) – Oliver

Antwort

9

Ein einfacher Ansatz ist es, eine foreach zu verwenden und eine Dictionary mit einem String.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

Schöne Möglichkeit meinen Ersatzwert zu leihen ;-) Nun, es ist ziemlich einfach zu verstehen, also +1. – user2864740

5

Ich vermute, Sie versuchen, Parameter in url mit Ihren Werten zu ersetzen. Dies kann mit C# HttpUtility.ParseQueryString

Holen Sie sich das currentURL von

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

Read Parameter aus der Abfrage-String

string value1 = _myUrl ["networkid"]; 

Schreiben Sie einen Wert in das Abfrage-Zeichenfolge-Objekt durchgeführt werden.

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

und dann schließlich in die URL umkehren

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

Es gibt keine Standardmethode in .NET "mit Wörterbuch Werte ersetzen". Während es eine Nummer Template-Engines gibt, ist es nicht sehr schwer, eine kleine Lösung für eine solche Operation zu schreiben. Hier ist ein Beispiel, das in LINQPad läuft und Regular Expression with a Match Evaluator verwendet.

Als Ergebnis ist eine URL, es die Anrufer Verantwortung ist die gelieferten Werte um sicherzustellen, dass alle correctly encoded sind. Ich empfehle die Verwendung von Uri.EscapeDataString als geeignet .. aber stellen Sie sicher, nicht zu codieren, wenn es an anderer Stelle verarbeitet wird.

Darüber hinaus sollten die Regeln, was zu tun ist, wenn kein Ersatz gefunden wird, auf den Bedarf zugeschnitten werden. Wenn nicht gefundene Ersetzungen zusammen mit dem Abfragezeichenfolgenschlüssel vollständig eliminiert werden sollen, kann der folgende Ausdruck den regulären Ausdruck auf @"\w+=({\w+})" erweitern, um den Parameterschlüssel auch in dieser spezifischen Vorlagensituation zu erfassen.

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(); 
} 

Fortgeschrittenere Techniken, wie Reflexion und Transformationen sind möglich - aber diese sollten für den realen Template-Engines gelassen werden.

2

du alos LinQ mit verwenden können

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(); 

diese Zeile können Sie die gewünschte functionlity

tun

myVal.Select (a => url = url.Replace (string.Concat ("{", a.Key, "}"), aV alue)). ToList();