문제

얻을 방법이 있습니까? HttpContext.Current.Request.Url.Host 그리고 HttpContext.Current.Request.ApplicationPath 한 번의 전화로?

"전체 응용 프로그램 URL"과 같은 것이 있습니까?

편집 : 설명 - 내가 필요한 것은 이것이 [] 내의 부분입니다.

http://[www.mysite.com/mywebapp]/Pages/Default.aspx

나는 단순히 호기심을 묻습니다.

편집 2 : 모든 답변에 감사하지만 그 중 어느 것도 내가 찾고 있던 것과 정확히 일치하지 않았습니다. 참고로, 나는 이런 식으로 문제를 해결했다 (그러나 더 부드러운 방법이 있는지 알고 여전히 관심이있다).

public string GetWebAppRoot()
{
    if(HttpContext.Current.Request.ApplicationPath == "/")
        return "http://" + HttpContext.Current.Request.Url.Host;
    else
        return "http://" + HttpContext.Current.Request.Url.Host + HttpContext.Current.Request.ApplicationPath;
}
도움이 되었습니까?

해결책

public static string GetSiteRoot()
{
  string port = System.Web.HttpContext.Current.Request.ServerVariables["SERVER_PORT"];
  if (port == null || port == "80" || port == "443")
    port = "";
  else
    port = ":" + port;

  string protocol = System.Web.HttpContext.Current.Request.ServerVariables["SERVER_PORT_SECURE"];
  if (protocol == null || protocol == "0")
    protocol = "http://";
  else
    protocol = "https://";

  string sOut = protocol + System.Web.HttpContext.Current.Request.ServerVariables["SERVER_NAME"] + port + System.Web.HttpContext.Current.Request.ApplicationPath;

  if (sOut.EndsWith("/"))
  {
    sOut = sOut.Substring(0, sOut.Length - 1);
  }

  return sOut;
}

다른 팁

이것은 포트 번호로 내 로컬 호스트에서 작동하지 않았으므로 약간 수정했습니다.

  private string GetWebAppRoot()
    {
        string host = (HttpContext.Current.Request.Url.IsDefaultPort) ? 
            HttpContext.Current.Request.Url.Host : 
            HttpContext.Current.Request.Url.Authority;
        host = String.Format("{0}://{1}", HttpContext.Current.Request.Url.Scheme, host);            
        if (HttpContext.Current.Request.ApplicationPath == "/")
            return host;
        else
            return host + HttpContext.Current.Request.ApplicationPath;
    }

당신이 정말로해야 할 일은 다음과 같습니다.

return String.Format("{0}://{1}/", Request.Url.Scheme, Request.Url.Host);

그렇게하면 HTTPS (또는 다른 스키마!)를 사용하는 경우 작동합니다.

모든 답변에 감사하지만, 그중 어느 누구도 내가 찾고 있던 것과 정확히 일치하지 않았습니다. 참고로, 나는 이런 식으로 문제를 해결했다 (그러나 더 부드러운 방법이 있는지 알고 여전히 관심이있다).

public string GetWebAppRoot()
{
    if(HttpContext.Current.Request.ApplicationPath == "/")
        return "http://" + HttpContext.Current.Request.Url.Host;
    else
        return "http://" + HttpContext.Current.Request.Url.Host + HttpContext.Current.Request.ApplicationPath;
}

확인하다 이 게시물:

public static Uri GetBaseUrl(HttpRequest request)
{
    Uri contextUri = new Uri(request.Url, request.RawUrl);
    UriBuilder realmUri = new UriBuilder(contextUri) { Path = request.ApplicationPath, Query = null, Fragment = null };
    return realmUri.Uri;
}

public static string GetAbsoluteUrl(HttpRequest request, string relativeUrl)
{
    return new Uri(GetBaseUrl(request), VirtualPathUtility.ToAbsolute(relativeUrl)).AbsoluteUri;
}

GetBaseurl DiRecly에서 필요한 것을 얻지 못하면 가능해야합니다.

GetAbsoluteUrl(HttpContext.Current.Request, "/")

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