programing

사이트 루트 URL을 받으려면 어떻게 해야 합니까?

starjava 2023. 9. 24. 12:18
반응형

사이트 루트 URL을 받으려면 어떻게 해야 합니까?

ASP의 절대 루트 URL을 받고 싶습니다.NET 애플리케이션을 동적으로 지원합니다.응용 프로그램에 대한 전체 루트 URL이어야 합니다. http(s)://hostname(:port)/

저는 이 정적인 방법을 사용해 왔습니다.

public static string GetSiteRootUrl()
{
    string protocol;

    if (HttpContext.Current.Request.IsSecureConnection)
        protocol = "https";
    else
        protocol = "http";

    StringBuilder uri = new StringBuilder(protocol + "://");

    string hostname = HttpContext.Current.Request.Url.Host;

    uri.Append(hostname);

    int port = HttpContext.Current.Request.Url.Port;

    if (port != 80 && port != 443)
    {
        uri.Append(":");
        uri.Append(port.ToString());
    }

    return uri.ToString();
}

하지만, 만약 내가 만약HttpContext.Current범위 안에?나는 이 상황에 직면했습니다.CacheItemRemovedCallback.

WebForms의 경우, 이 코드는 응용프로그램이 얼마나 중첩되었는지에 관계없이 응용프로그램 루트의 절대 경로를 반환합니다.

HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + ResolveUrl("~/")

위의 첫번째 부분은 어플리케이션의 스킴과 도메인 이름을 반환합니다 (http://localhost뒤로 밀리지 않고 말입니다.ResolveUrlcode는 응용 프로그램 루트에 대한 상대 경로를 반환합니다(/MyApplicationRoot/)를 결합하면 웹 양식 응용 프로그램의 절대 경로를 얻을 수 있습니다.

MVC 사용:

HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) + Url.Content("~/")

또는 레이저 뷰에서 직접 사용하려는 경우:

@HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority)@Url.Content("~/")

경로 전달 슬래시 이후에 원시 URL을 가져와 모든 것을 잘라내는 시도를 할 수도 있습니다.당신은 또한 다음과 같이 통합할 수 있습니다.ResolveUrl("~/").

public static string GetAppUrl()
{
    // This code is tested to work on all environments
    var oRequest = System.Web.HttpContext.Current.Request;
    return oRequest.Url.GetLeftPart(System.UriPartial.Authority)
        + System.Web.VirtualPathUtility.ToAbsolute("~/");

}
public static string GetFullRootUrl()
{   
    HttpRequest request = HttpContext.Current.Request;
    return request.Url.AbsoluteUri.Replace(request.Url.AbsolutePath, String.Empty);
}

앱 설정("SiteRootUrl")에 web.config 설정을 추가하여 해결했습니다.단순하고 효과적이지만 유지해야 할 또 다른 구성 설정.

 UrlHelper url = new UrlHelper(filterContext.RequestContext);
 string helpurl = url.Action("LogOn", "Account", new { area = "" },
                      url.RequestContext.HttpContext.Request.Url.Scheme);

절대 url을 가져다 줄 수 있습니다.

@saluce는 훌륭한 아이디어를 가지고 있었지만, 그의 코드는 여전히 객체 참조를 필요로 하기 때문에 일부 코드 블록에서는 실행할 수 없습니다.다음과 함께, 당신이 당신이 가지고 있는 한.Current.Request다음이 작동합니다.

With HttpContext.Current.Request
    Return .Url.GetLeftPart(UriPartial.Authority) + .ApplicationPath + If(.ApplicationPath = "/", Nothing, "/")
End With

프로토콜, 포트 또는 루트 폴더에 관계없이 작동합니다.

이것은 항상 나에게 효과가 있었습니다.

string root = Request.Url.AbsoluteUri.Replace(Request.Url.PathAndQuery, "");

URI의 쿼리 문자열 제거 및 IIS에서 가상 디렉터리인 경우 처리를 기반으로 합니다.

private static string GetSiteRoot()
{
    string siteRoot = null;
    if (HttpContext.Current != null)
    {
        var request = HttpContext.Current.Request;
        siteRoot = request.Url.AbsoluteUri
                .Replace(request.Url.AbsolutePath, String.Empty)        // trim the current page off
                .Replace(request.Url.Query, string.Empty);              // trim the query string off

        if (request.Url.Segments.Length == 4)
        {
            // If hosted in a virtual directory, restore that segment
            siteRoot += "/" + request.Url.Segments[1];
        }

        if (!siteRoot.EndsWith("/"))
        {
            siteRoot += "/";
        }
    }

    return siteRoot;
}

언급URL : https://stackoverflow.com/questions/5853294/how-do-i-get-the-site-root-url

반응형