사이트의 기본 URL을 어떻게 알 수 있습니까?
사이트의 기본 URL을 반환하는 작은 도우미 메소드를 작성하고 싶습니다.제가 생각해낸 것은 다음과 같습니다.
public static string GetSiteUrl()
{
string url = string.Empty;
HttpRequest request = HttpContext.Current.Request;
if (request.IsSecureConnection)
url = "https://";
else
url = "http://";
url += request["HTTP_HOST"] + "/";
return url;
}
여기서 혹시 생각할 수 있는 실수가 있습니까?누가 이것을 개선할 수 있습니까?
사용해 보십시오.
string baseUrl = Request.Url.Scheme + "://" + Request.Url.Authority +
Request.ApplicationPath.TrimEnd('/') + "/";
string baseUrl = Request.Url.GetLeftPart(UriPartial.Authority)
바로 그거야 ;)
대중적인GetLeftPart
의 PCL 버전에서는 솔루션이 지원되지 않습니다.Uri
,불행하게도. GetComponents
그러나 휴대성이 필요한 경우에는 다음과 같은 이점이 있습니다.
uri.GetComponents(
UriComponents.SchemeAndServer | UriComponents.UserInfo, UriFormat.Unescaped);
이것은 훨씬 더 확실한 방법입니다.
VirtualPathUtility.ToAbsolute("~/");
위의 답변은 사이트가 웹사이트의 루트에 없을 때 고려하지 않는다고 생각합니다.
이것은 WebApi 컨트롤러용입니다.
string baseUrl = (Url.Request.RequestUri.GetComponents(
UriComponents.SchemeAndServer, UriFormat.Unescaped).TrimEnd('/')
+ HttpContext.Current.Request.ApplicationPath).TrimEnd('/') ;
제가 보기에 @warlock's는 지금까지 여기서 가장 좋은 답처럼 보이지만, 저는 항상 과거에 이것을 사용했습니다.
string baseUrl = Request.Url.GetComponents(
UriComponents.SchemeAndServer, UriFormat.UriEscaped)
또는 WebAPI 컨트롤러에서;
string baseUrl = Url.Request.RequestUri.GetComponents(
UriComponents.SchemeAndServer, UriFormat.Unescaped)
어떤 탈출 형식을 원하는지 선택할 수 있도록 편리합니다.왜 그렇게 다른 구현이 두 개인지 명확하지 않으며, 제가 알기로는 이 방법과 @warlock은 이 경우에 정확히 같은 결과를 반환합니다. 하지만 보기에는GetLeftPart()
또한 URI와 같은 비서버에서도 작동합니다.mailto
예를 들어 태그입니다.
찬성합니다
HttpContext.Current.Request.ServerVariables["HTTP_HOST"]
Warlock이 작성한 내용을 바탕으로 웹 루트에 호스팅되지 않는 경우 가상 경로 루트가 필요하다는 것을 알게 되었습니다. (MVC 웹 API 컨트롤러에 적용됩니다.)
String baseUrl = Request.RequestUri.GetLeftPart(UriPartial.Authority)
+ Configuration.VirtualPathRoot;
Application_Start의 다음 코드를 사용하고 있습니다.
String baseUrl = Path.GetDirectoryName(HttpContext.Current.Request.Url.OriginalString);
이것은 나에게 효과가 있습니다.
Request.Url.OriginalString.Replace(Request.Url.PathAndQuery, "") + Request.ApplicationPath;
- 요청합니다.Url.OriginalString: 브라우저에 표시된 것과 동일한 전체 경로를 반환합니다.
- 요청합니다.Url.PathAndQuery: (완전한 경로) - (도메인 이름 + PORT)를 반환합니다.
- 요청합니다.ApplicationPath: 호스트된 서버에서 "/"을 반환하고 로컬 IIS 배포에서 "애플리케이션 이름"을 반환합니다.
따라서 도메인 이름에 액세스하려면 다음과 같은 경우 응용 프로그램 이름을 포함하는 것을 고려해야 합니다.
- IIS 배포
- 응용 프로그램이 하위 도메인에 배포된 경우.
====================================
dev.x.us/web 의 경우
이 강한 텍스트를 반환합니다.
아래 코드를 사용하십시오.
string.Format("{0}://{1}", Request.url.Scheme, Request.url.Host);
포트 80/SSL이 아닌 포트에 추가할 수 있습니까?
다음과 같은 것:
if (HttpContext.Current.Request.ServerVariables["SERVER_PORT"] != null && HttpContext.Current.Request.ServerVariables["SERVER_PORT"].ToString() != "80" && HttpContext.Current.Request.ServerVariables["SERVER_PORT"].ToString() != "443")
{
port = String.Concat(":", HttpContext.Current.Request.ServerVariables["SERVER_PORT"].ToString());
}
그리고 그것을 최종 결과에 사용합니까?
언급URL : https://stackoverflow.com/questions/7413466/how-can-i-get-the-baseurl-of-site
'programing' 카테고리의 다른 글
영역에서 공통 _ViewStart를 어떻게 사용합니까? (0) | 2023.05.20 |
---|---|
Mongod 서비스 시작이 코드 100으로 종료됩니다. (0) | 2023.05.20 |
WPF의 텍스트 상자에 포커스 설정 (0) | 2023.05.20 |
Eclipse - "작업영역이 사용 중이거나 작성할 수 없습니다. 다른 작업영역을 선택하십시오." (0) | 2023.05.20 |
NodeJs: /usr/bin/env: 노드를 설치할 수 없습니다.해당 파일 또는 디렉터리가 없습니다. (0) | 2023.05.20 |