[asp.net] ASP.NET에서 현재 도메인을 얻는 가장 좋은 방법은 무엇입니까?

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의 위 IsDefaultPortAccepted 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);