사이트의 기본 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);
답변
사이트가 웹 사이트의 루트에 있지 않은 경우 위의 답변은 고려하지 않는다고 생각합니다.
이것은 WebApi 컨트롤러 용입니다.
string baseUrl = (Url.Request.RequestUri.GetComponents(
UriComponents.SchemeAndServer, UriFormat.Unescaped).TrimEnd('/')
+ HttpContext.Current.Request.ApplicationPath).TrimEnd('/') ;
답변
나에게 @warlock은 지금까지 가장 좋은 대답처럼 보이지만 과거에는 항상 이것을 사용했습니다.
string baseUrl = Request.Url.GetComponents(
UriComponents.SchemeAndServer, UriFormat.UriEscaped)
또는 WebAPI 컨트롤러에서;
string baseUrl = Url.Request.RequestUri.GetComponents(
UriComponents.SchemeAndServer, UriFormat.Unescaped)
원하는 이스케이프 형식을 선택할 수있어 편리합니다. 왜 두 가지 다른 구현이 있는지 분명하지 않으며,이 방법과 @ warlock ‘s 가이 경우에도 동일한 결과를 반환하지만 GetLeftPart()
서버 비 Uri의 mailto
태그 와 같은 경우 에도 작동 하는 것처럼 보입니다. .
답변
이것은 훨씬 더 바보 같은 방법입니다.
VirtualPathUtility.ToAbsolute("~/");
답변
나는 함께 간다
HttpContext.Current.Request.ServerVariables["HTTP_HOST"]