it-swarm-ko.tech

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

현재 도메인을 얻는 가장 좋은 방법이 ASP.NET에 있는지 궁금합니다.

예를 들어 :

http://www.domainname.com/subdir/http://www.domainname.comhttp : //www.sub.domainname을 산출해야합니다. .com/subdir /http://sub.domainname.com 을 산출해야합니다.

가이드로, "/Folder/Content/filename.html"(예 : ASP.NET MVC의 Url.RouteUrl ()에 의해 생성 된)과 같은 URL을 URL에 바로 추가 할 수 있어야합니다.

98
Matt Mitchell

MattMitchell과 같은 대답이지만 약간 수정되었습니다. 대신 기본 포트를 확인합니다.

편집 : 구문 업데이트 및 Request.Url.Authority 제안한대로

$"{Request.Url.Scheme}{System.Uri.SchemeDelimiter}{Request.Url.Authority}"
180
Carlos Muñoz

이 링크 에 따라 좋은 시작점은 다음과 같습니다.

Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host 

그러나 도메인이 http://www.domainname.com:5 이면 실패합니다.

다음과 같은 것이 이것을 해결하려는 유혹입니다.

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의 Accepted Answer 에서와 같이 IsDefaultPort를 사용해야합니다.

37
Matt Mitchell
Request.Url.GetLeftPart(UriPartial.Authority)

이것은 계획이 포함되어 있습니다.

28
izlence

경고! 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

이 버그로 인해 도메인 호스트를 구성 파일에 문자열로 삽입해야했습니다.

19
Thirlan

왜 사용하지

Request.Url.Authority

전체 도메인과 포트를 반환합니다.

여전히 http 또는 https를 파악해야합니다.

13
Korayem

Simpleshort way (스키마, 도메인 및 포트 지원) :

사용 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
2
RAM

어때요 :

NameValueCollection vars = HttpContext.Current.Request.ServerVariables;
string protocol = vars["SERVER_PORT_SECURE"] == "1" ? "https://" : "http://";
string domain = vars["SERVER_NAME"];
string port = vars["SERVER_PORT"];
1
Derek Lawless

또 다른 방법:


string domain;
Uri url = HttpContext.Current.Request.Url;
domain= url.AbsoluteUri.Replace(url.PathAndQuery, string.Empty);
1
user280429

UriBuilder 사용 :

    var relativePath = ""; // or whatever-path-you-want
    var uriBuilder = new UriBuilder
    {
        Host = Request.Url.Host,
        Path = relativePath,
        Scheme = Request.Url.Scheme
    };

    if (!Request.Url.IsDefaultPort)
        uriBuilder.Port = Request.Url.Port;

    var fullPathToUse = uriBuilder.ToString();
0
Darren