2013-02-04 3 views
9

내 요구 사항은 HTTP URL을 구문 분석하고 이에 따라 함수를 호출하는 것입니다. 현재 구현에서는 최적화 된 방법이 아닌 것으로 생각되는 중첩 된 if-else 문을 사용하고 있습니다. 다른 효율적인 승인을 제안 할 수 있습니까?C#에서 HTTP URL을 구문 분석하려면 어떻게해야합니까?

URL은 다음과 같다 :

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

함수 이름 만 필요하면 URL을 분할하고 마지막 토큰 만 가져 오면 어떨까요? – SamGamgee

+1

"구문 분석"의 의미를 명확히 할 수 있습니까? 추출하려는 특정 데이터가 있다고 가정합니다. 그러나 어떤 목적을위한 것일까? –

+0

내가 얻는 많은 종류의 URL이 있습니다. 그것은 속성, 유용한 값을 uris도 포함되어 있습니다. – vijay053

답변

36

나는 System.Uri 클래스에서 많은 것을 사용할 수 있다고 생각합니다. URI에 피드를하면 여러 가지 방법으로 조각을 꺼낼 수 있습니다.

몇 가지 예 :

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

가 나는 URL의 흥미로운 기능에서 얻을 문자열 분할과 Suncat2000의 대답 분할을 결합했다. 나는 https를 포함한 전체 열린 우리당을 전달하고있다 : 등을 다른 페이지에서 탐색 인수 e.Parameter 같이

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

을이 구글의 API에서 사용하기 위해 PLs__ 등 나에게 양식을 재생 목록을 가져옵니다.

2

이 늦은 대답의 약간으로 올 수도 있지만 자신은 최근 일부 URL을 구문 분석을 시도 발견하고 내가 본 here으로 UriSystem.Web.HttpUtility의 조합을 사용하여 따라 갔다, 내 URL은 그래서 이것은 내가 무슨 짓을 http://one-domain.com/some/segments/{param1}?param2=x....처럼되었다 : 두 경우 모두 당신이 string의 작업 및 세그먼트로 작업 할 때 특별히 피곤한 수있을거야

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

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

참고.

관련 문제