사이트 루트 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
뒤로 밀리지 않고 말입니다.ResolveUrl
code는 응용 프로그램 루트에 대한 상대 경로를 반환합니다(/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
'programing' 카테고리의 다른 글
"text" 속성을 사용하여 파일을 정규화한 후 git가 마스터 브랜치를 체크아웃하고 캐리지 리턴을 제거하려면 어떻게 해야 합니까? (0) | 2023.10.04 |
---|---|
판다의 데이터 프레임별 그룹화 및 열 유지 방법 (0) | 2023.10.04 |
XML로 표시된 Android 비트맵 이미지 크기 (0) | 2023.09.24 |
Angular JS에서 ngBind, ngBindHtm & ngBindTemplate의 차이 (0) | 2023.09.24 |
jQuery $.cookie는 함수가 아닙니다. (0) | 2023.09.24 |