ASP.NET에서 사이트의 절대적으로 완전히 자격이있는 URL을 결정하십시오

StackOverflow https://stackoverflow.com/questions/121962

  •  02-07-2019
  •  | 
  •  

문제

사이트가 가상 디렉토리에 있는지 여부와 내 코드가 디렉토리 구조의 위치에 관계없이 사이트의 절대적이고 완전히 자격이있는 루트 또는 기본 URL을 지속적으로 얻을 수있는 방법은 무엇입니까? 나는 내가 생각할 수있는 모든 변수와 기능을 시도했지만 좋은 방법을 찾지 못했습니다.

현재 사이트의 URL을 얻을 수 있기를 원합니다. http://www.example.com 또는 가상 디렉토리 인 경우 http://www.example.com/dnn/


여기에 내가 시도한 것들과 결과가 있습니다. 내가 원하는 전체 조각을 포함하는 유일한 사람 (http : // localhost : 4471/dnn441)는 request.uri.absoluteuri :

  • request.physicalpath : c : websites dnn441 default.aspx
  • request.applicationphance : /dnn441
  • request.physicalApplicationPath : C : 웹 사이트 dnn441
  • Mappath : C : 웹 사이트 dnn441 goodtopmodules articles templates default.aspx
  • rawurl : /dnn441/moduletesting/articles/tabid/56/ctl/details/mid/374/itemid/1/default.aspx
  • request.url.absoluteuri : http : // localhost : 4471/dnn441/default.aspx
  • request.url.absolutepath : /dnn441/default.aspx
  • request.url.localpath : /dnn441/default.aspx request.url.host : localhost
  • request.url.pathandquery : /dnn441/default.aspx?tabid=56&ctl=details&mid=374&itemid=1
도움이 되었습니까?

해결책

Rick Strahl의 블로그에 제공된 답변을 읽을 때 나는 내가 정말로 필요한 것이 매우 간단하다는 것을 알았습니다. 먼저 상대 경로를 결정하고 (나를 위해 쉬운 부분 이었음) 아래 정의 된 기능으로 전달해야합니다.

vb.net

Public Shared Function GetFullyQualifiedURL(ByVal s as string) As String
   Dim Result as URI = New URI(HttpContext.Current.Request.Url, s)
   Return Result.ToString
End Function

씨#

public static string GetFullyQualifiedURL(string s) {
    Uri Result = new Uri(HttpContext.Current.Request.Url, s);
    return Result.ToString();
}

다른 팁

허용 된 답변은 현재 요청이 이미 서버/가상 루트에 있다고 가정합니다. 이 시도:

Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath

훌륭한 토론과 아이디어가 있습니다 Rick Strahl의 블로그

편집 : 아이디어는 유효한 HTTPContext와 함께 또는 작동하지 않는다고 덧붙여 야합니다.

edit2 : 여기에 있습니다 특정 의견 / 코드 그 게시물에서 질문에 대한 답변

설립하다 이 코드는 여기에 있습니다:

string appPath = null;

appPath = string.Format("{0}://{1}{2}{3}",
    Request.Url.Scheme,
    Request.Url.Host,
    Request.Url.Port == 80 ? string.Empty : ":" + Request.Url.Port,
    Request.ApplicationPath);

일반적으로 web.config 파일에 구성된 AppSettings.RootUrl을 사용해 보셨습니까?

링크로 사용하기 위해 이야기하고 있습니까?

그렇다면이 작업을 수행합니다 <a href='/'>goes to root</a> 웹 루트의 기본 파일로 이동합니다.

이제 클라이언트 측의 경우 "~/"를 Control :: ResolveUrl 메소드로 전달하면 원하는 것을 제공합니다. (http://msdn.microsoft.com/en-us/library/system.web.ui.control.resolveurl.aspx)

현재 이것을 검증 할 방법이 없지만 다른 컴퓨터에서 "request.url.absoluteuri"를 시도해 보셨습니까?

컴퓨터에 관한 한 브라우저가 LocalHost에서 요청하는 것이 나에게 발생합니다.

그래도 틀릴 수는 있지만 요청은 웹 서버가 아닌 브라우저와 관련이 있다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top