2016-11-08 6 views
1

In meiner C# -Anwendung baue ich eine Routine, die durch eine URL analysieren wird, ersetzen Sie alle Abschnitte der URL mit den entsprechenden Daten.So entfernen Sie geklammerte Abschnitte einer URL

Zum Beispiel, wenn ich eine URL wie habe:

api.domain.com/users/{id}

und der Benutzer stellt die ID, ersetze ich die ID mit dem angegebenen Wert.

Das ist einfach genug:

if(path.Contains("{id}") path = path.Replace("{id}", id);

jedoch, was ich will ist in der Lage sein, die {id} aus der URL zu entfernen, wenn keine ID versehen ist, so dass die endgültige URL ist: api.domain.com/users

ich möchte es auch intelligent die Lage sein, Elemente des Pfades in der Mitte zu entfernen, so dass, wenn die uRL ist: api.domain.com/users/{id}/photos

Ich würde erhalten: api.domain.com/users/photos

Dafür möchte ich weiß nicht, den Text des Schlüssels vor der Zeit so {id} könnte alles sein wie:

{name} {sometext} {anyvalue}

Aber ich, dass jeder muss wissen in geschweiften Klammern enthalten sein.

Jede Hilfe würde sehr geschätzt werden!

+0

Kann verwenden anpassen {0} und ersetzen mit string.Format()? – kat1330

+0

Was haben Sie bisher versucht? Können Sie dies posten "Ich baue eine Routine, die durch eine URL analysieren wird, ersetzen alle Abschnitte" – vipersassassin

+0

2 Punkte: 1. 'if (path.Contains (" {id} ") path = path.Replace (" {id} " , id) '- Sie brauchen nicht den contains check. Sie können' .Replace() 'einfach tun und es wird nur ersetzt, wenn es tatsächlich existiert 2.Warum können Sie nicht immer den replace für die Mitte verwenden ? Die URL funktioniert immer noch, selbst wenn es einen doppelten Schrägstrich gibt. –

Antwort

0

Sie können etwas tun:

public string UrlReplace(string Url, string key, string value = "") 
{ 
    var replaceString = "{" + key + "}"; //get the string to replace 

    //if the value is empty remove the slash 
    if (string.IsNullOrEmpty(value)) 
    { 
     //find the index of the replace string in the url 
     var index = url.IndexOf(replaceString) + replaceString.Length; 
     if (url[index] == '/') 
     { 
      url = url.Remove(index, 1); //if the character after the string is a slash, remove it 
     } 
    } 
    return url.Replace(replaceString, value); //replace the string with the value 
} 

Dann würden Sie es wie

verwenden
string url = "api.domain.com/users/{id}/photos"; 
url = UrlReplace(url,"id","test"); 
//returns "api.domain.com/users/test/photos" 
url = UrlReplace(url, "id", ""); 
//returns "api.domain.com/users/photos" 
Verwandte Themen