2009-07-10 7 views
0

변수 url에 저장하는 절대 URL /testserver/tools/search.aspx가 있다고 가정 해 보겠습니다.어떻게 다음 문자열의 일부를 얻을 수 있습니까?

/testserver를 사용하지 않고 url == /tools/search.aspx인지 확인하고 싶습니다.

더 완벽한 예는 다음과 같습니다

내 TESTSERVER가 URL http://www.testserver.com/tools/Search.aspx을 포함

,

하지만 내 라이브 서버는 URL http://www.liveserver.com/tools/Search.aspx

이 들어 나는에 TESTSERVER URL을 저장하는 변수 URL을 비교하면 liveserver url, 실패 할 것입니다. 왜 내가 /tools/Search.aspx 부분을 체크하고 싶은지입니다. 내가 사용하는 것이

+0

정규 표현식 :

여기에 그것을 수행하는 방법의 예? – thebrokencube

+0

당신의 URL은'/ testserver/tools/search.aspx' 또는'http : // www.testserver.com/tools/Search.aspx'입니까? – dtb

+0

디버그하고 AbsoulteUrl이 /testserver/tools/search.aspx인지 확인하십시오. – Xaisoft

답변

2
if (url.ToLower().Contains("/tools/search.aspx")) 
{ 
    //do stuff here 
} 

는 경우에 당신은 쿼리 문자열이 포함되어 있습니다,하지만 당신은 쿼리 문자열이없는 경우도 EndsWith ("/ 도구/search.aspx")를 사용할 수 있습니다.

+2

"EndsWith"가 더 나은 선택 일 수 있습니다. –

+0

궁금해서, EndsWith를 더 나은 선택으로 만드는 것은 무엇입니까? – Xaisoft

+1

@Andrew - 일치시키려는 경우를 제외하고 .../search.aspx? name = something. EndsWith는 쿼리 매개 변수없이 URL이 있다고 확신하는 경우 더 좋습니다. – tvanfosson

0

AppRelativeCurrentExecutionFilePath 속성을 사용하면 응용 프로그램 루트의 상대 경로를 알 수 있습니다. 그래서 "http://host/virtualfolder/page.aspx""~/page.aspx" 될 것입니다 : 당신의 입력 형태 "http://www.testserver.com/tools/Search.aspx"이다

if (HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath.Equals("~/search.aspx", StringComparison.InvariantCultureIgnoreCase)) 
{ 
    // do something 
} 
3

경우

var path1 = new Uri("http://www.testserver.com/tools/Search.aspx").AbsolutePath; 
var path2 = new Uri("http://www.liveserver.com/tools/Search.aspx").AbsolutePath; 

두 결과를 "/tools/Search.aspx"에. 쿼리 문자열을 가진 사람들, 조각 식별자를 포함하는, 즉 어떤 URI를 수락 할 경우 Uri를 사용

는 입력 양식 "/ TESTSERVER이다


경우 등, 최적의 솔루션입니다. COM/도구/Search.aspx " 모든 입력이 항상이 양식 유효 될 것이라는 점을 알고 다른 URI 구성 요소를 포함하지 :

var input = "/testserver.com/tools/Search.aspx"; 
var path1 = input.Substring(input.Index('/', 1)); 

결과는 "/tools/Search.aspx"입니다.

+1

Up은 핵심 시스템 라이브러리에서 제공하는 테스트되고 검증 된 기능을 사용하는 것이 좋습니다. 왜 다른 행동을 취하니? – belugabob

+0

질문에 언급 된 것처럼 응용 프로그램이 서버의 가상 폴더에 배포 된 경우 어떻게됩니까? –

1
Regex.Match(url, @"^.*?/tools/search\.aspx\??.*", 
       RegexOptions.IgnoreCase).Success == true 

당신은 당신이 어쨌든 도메인이 없습니다 Request.PathInfo에서 URL을 잡아 ...하지만 당신은 당신이 당신의 경로/TESTSERVER/하나가 아닌 URL을에이 말하는 것처럼, 모호한 질문하는 경우 제공하십시오. 유일한 차이는 "합니다 (내가 그들의 절대 경로을 비교하기 위해 System.Uri 클래스를 사용하는 것과 URL의 호스트 부분이 될 것입니다 경우

그렇지 않으면, Request.Url.ToString()

0

에서 URL을 설정 도구/Search.aspx "부분). 어쩌면,

static void Main(string[] args) 
{ 
    //load up the uris 
    Uri uri = new Uri("http://www.testserver.com/tools/search.aspx");    
    Uri matchingUri = new Uri("http://www.liveserver.com/tools/search.aspx"); 
    Uri nonMatchingUri = new Uri("http://www.liveserver.com/tools/cart.aspx"); 

    //demonstrate what happens when the uris match 
    if (uri.AbsolutePath == matchingUri.AbsolutePath) 
     Console.WriteLine("These match"); 
    //demonstrate what happens when the uris don't match 
    if (uri.AbsolutePath != nonMatchingUri.AbsolutePath) 
     Console.WriteLine("These do not match"); 
} 
관련 문제