2013-02-04 6 views
9

Meine Anforderung ist es, HTTP-URLs zu analysieren und Funktionen entsprechend aufzurufen. In meiner aktuellen Implementierung verwende ich eine verschachtelte if-else-Anweisung, die meiner Meinung nach keine optimierte Methode ist. Können Sie einen anderen effizienten Ansatz vorschlagen?Wie kann ich HTTP-URLs in C# analysieren?

Urls sind wie diese:

  • server/func1
  • server/func1/SubFunc1
  • server/func1/SubFunc2
  • server/func2/SubFunc1
  • server/func2/SubFunc2
+0

Was ist mit Split der URLs und erhalten nur die letzte Token, wenn Sie nur die Funktionsnamen benötigen? – SamGamgee

+1

Kannst du klarer darüber sein, was du mit "parse" meinst? Ich nehme an, dass es bestimmte Daten gibt, die Sie extrahieren möchten. Aber welcher Teil und zu welchem ​​Zweck? –

+0

Es gibt viele Arten von URLs, die ich bekomme. Es enthält Attribute, nützlichen Wert auch in Uris. – vijay053

Antwort

36

Ich denke, Sie können viel aus der Klasse System.Uri herausholen. Füttere es mit einem URI und du kannst Stücke in einer Reihe von Anordnungen herausziehen.

Einige Beispiele:

Uri myUri = new Uri("http://server:8080/func2/SubFunc2?query=somevalue"); 

// Get host part (host name or address and port). Returns "server:8080". 
string hostpart = myUri.Authority; 

// Get path and query string parts. Returns "/func2/SubFunc2?query=somevalue". 
string pathpart = myUri.PathAndQuery; 

// Get path components. Trailing separators. Returns { "/", "func2/", "sunFunc2" }. 
string[] pathsegments = myUri.Segments; 

// Get query string. Returns "?query=somevalue". 
string querystring = myUri.Query; 
0

kombinierte ich die Spaltung in Suncat2000 Antwort mit String-Splitting zu interessanten Merkmalen der URL zu erhalten. Ich bin vorbei in einem vollen Uri einschließlich https: usw. von einer anderen Seite als Navigations Argument e.Parameter:

Uri playlistUri = (Uri)e.Parameter; 
string youtubePlaylistUnParsed = playlistUri.Query; 
char delimiterChar = '='; 
string[] sections = youtubePlaylistUnParsed.Split(delimiterChar); 
string YoutubePlaylist = sections[1]; 

Dies wird mir die Wiedergabeliste in dem PLs__ usw. Form zur Verwendung in dem Google APIs.

2

Dies als ein bisschen eine späte Antwort kommen könnte, aber ich fand mich vor kurzem versucht, einige URLs zu analysieren und ich ging eine Kombination aus Uri und System.Web.HttpUtility gesehen here zusammen mit, waren meine URLs wie http://one-domain.com/some/segments/{param1}?param2=x.... so ist es das, was ich tat :

var uri = new Uri(myUrl); 
string param1 = uri.Segments.Last(); 

var parameters = HttpUtility.ParseQueryString(uri.Query); 
string param2 = parameters["param2"]; 

beachten Sie, dass beide Fälle in Ihnen string s arbeiten werden, und besonders müde werden, wenn sie mit Segmenten arbeiten.

Verwandte Themen