ASP.NET에서 현재 도메인을 얻는 가장 좋은 방법이 무엇인지 궁금합니다.
예를 들면 :
http://www.domainname.com/subdir/ 은 http://www.domainname.com 을 산출해야합니다 .
http://www.sub.domainname.com/subdir/ 은 http://sub.domainname.com 을 산출해야합니다 .
가이드로 “/Folder/Content/filename.html”(ASP.NET MVC에서 Url.RouteUrl ()에 의해 생성 된 것처럼)과 같은 URL을 URL에 바로 추가 할 수 있어야하며 제대로 작동해야합니다.
답변
MattMitchell과 같은 대답이지만 약간의 수정이 있습니다. 대신 기본 포트를 확인합니다.
편집 : 업데이트 된 구문 및
Request.Url.Authority
제안 된대로 사용
$"{Request.Url.Scheme}{System.Uri.SchemeDelimiter}{Request.Url.Authority}"
답변
당 이 링크 좋은 시작 지점입니다 :
Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host
그러나 도메인이 http://www.domainname.com:500 이면 실패합니다.
다음과 같은 방법으로이 문제를 해결할 수 있습니다.
int defaultPort = Request.IsSecureConnection ? 443 : 80;
Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host
+ (Request.Url.Port != defaultPort ? ":" + Request.Url.Port : "");
그러나 포트 80 및 443은 구성에 따라 다릅니다.
따라서 Carlos Muñoz의 위 IsDefaultPort
의 Accepted Answer 에서 와 같이 사용해야합니다 .
답변
Request.Url.GetLeftPart(UriPartial.Authority)
이것은 포함 된 계획입니다.
답변
경고! Current.Request .Url.Host 를 사용하는 모든 사람에게 . CURRENT REQUEST를 기반으로 작업하고 있으며 현재 요청이 항상 서버에 있지 않으며 때로는 다른 서버에있을 수 있음을 이해하십시오.
따라서 Global.asax의 Application_BeginRequest ()와 같이 이것을 사용하면 99.9 %는 괜찮지 만 0.1 %는 서버의 호스트 이름이 아닌 다른 것을 얻을 수 있습니다.
이에 대한 좋은 예는 얼마 전에 발견 한 것입니다. 내 서버는 때때로 http://proxyjudge1.proxyfire.net/fastenv 를 누르는 경향이 있습니다. Application_BeginRequest ()는이 요청을 기꺼이 처리하므로이 요청을 할 때 Request.Url.Host를 호출하면 proxyjudge1.proxyfire.net을 다시 받게됩니다. 여러분 중 일부는 “no duh”라고 생각할 수도 있지만 0.1 %의 시간 동안 만 발생했기 때문에 알아 차리기가 매우 어려운 버그 였기 때문에 주목할 가치가 있습니다. P
이 버그로 인해 구성 파일에 내 도메인 호스트를 문자열로 삽입해야했습니다.
답변
사용하지 않는 이유
Request.Url.Authority
전체 도메인과 포트를 반환합니다.
여전히 http 또는 https를 계산해야합니다.
답변
간단 하고 짧은 방법 (스키마, 도메인 및 포트 지원) :
사용하다 Request.GetFullDomain()
// Add this class to your project
public static class HttpRequestExtensions{
public static string GetFullDomain(this HttpRequestBase request)
{
var uri= request?.UrlReferrer;
if (uri== null)
return string.Empty;
return uri.Scheme + Uri.SchemeDelimiter + uri.Authority;
}
}
// Now Use it like this:
Request.GetFullDomain();
// Example output: https://www.example.com:5031
// Example output: http://www.example.com:5031
// Example output: https://www.example.com
답변
또 다른 방법:
string domain;
Uri url = HttpContext.Current.Request.Url;
domain= url.AbsoluteUri.Replace(url.PathAndQuery, string.Empty);