2011-12-19 3 views
1

VB.net에서 파일에 동적으로 링크를 설정하려고합니다. 내 URL이 그 다음과 같습니다VB.net/asp.net : 파일 이름이없는 URL 얻기

http://server/folder/folder2/file.aspx?get=param 

내가 Request.URL을 사용하려고하지만 난 모든 솔루션은 쿼리 문자열없이 파일 이름없이 단지

http://server/folder/folder2/ 

얻을 발견하지 않았습니다.

도와주세요.

+0

그럼 검색어 문자열도 원하십니까? – ChrisF

+0

아니요, "http : // server/folder/folder2 /"를 원합니다. –

+0

아 - 질문을 잘못 읽었습니다. – ChrisF

답변

1
쉽게 다음의 Request 인스턴스를 사용하여 상대 파일 경로를 얻을 Path 클래스를 사용하여, 그와 함께 작업 할 수

은 도와야 :

Dim relativePath = Request.AppRelativeCurrentExecutionFilePath 
Dim relativeDirectoryPath = System.IO.Path.GetDirectoryName(relativePath) 

당신이 확장 할 수 있도록이 GetDirectoryName이 슬래시를 변환 할 수 있음을 주목할 필요가 경로 :

Dim mappedPath = HttpContext.Current.Server.MapPath(newpath) 

그래서, 중복을 제거하기 위해, 우리는 이 단축 수 :

Dim path = _ 
    Server.MapPath(_ 
     Path.GetDirectoryName(_ 
      Request.AppRelativeCurrentExecutionFilePath))) 

하지만 가능한 예외가 있는지 확인해야합니다.

6
Dim url = Request.Url; 
Dim result = String.Format(
    "{0}{1}", 
    url.GetLeftPart(UriPartial.Authority), 
    String.Join(string.Empty, url.Segments.Take(url.Segments.Length - 1)) 
) 
당신은 예를 들어, 컴퓨터 이름 및 다음 Uri.Segments (배열) 파일 이름까지 모든 것을 얻을 얻을 Uri.Host을 사용할 수 있습니다
+2

+1, 멋진 솔루션입니다. String.Format 문을 너무 많이 사용한다고 생각하기는하지만 ('a & b'로 충분합니다. String.Format ("{0} {1 } ", a, b)') – Heinzi

+0

옵션 strictly는 1 차원 배열의 문자열 –

+0

에서 System.collections.generic.ienumerable의 암시 적 변환을 허용하지 않습니다. @Heinzi, 더 읽기 쉽다고 생각하는대로 내 대답을 자유롭게 업데이트하십시오. –

1

:

var fileName = Uri.Host && Uri.Segments(0) && Uri.Segments(1) 

이 당신을 줄 것이다 : server/folder/folder2

가변 개수의 세그먼트가있는 경우 세그먼트를 반복하고 마지막 세그먼트는 무시할 수 있습니다.

도움이 되길 바랍니다.