ASP.NET에서 현재 도메인 이름을 얻는 방법


82

asp.net c #에서 현재 도메인 이름을 얻고 싶습니다.

이 코드를 사용하고 있습니다.

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

내 URL은 localhost:5858있지만 localhost.

이제 localhost에서 내 프로젝트를 사용하고 있습니다. 나는 localhost : 5858을 얻고 싶다.

다른 예를 들어,이 도메인을 사용할 때

www.somedomainname.com

난 갖길 원해 somedomainname.com

현재 도메인 이름을 얻는 방법을 알려주세요.


1
호스트 이름과 도메인 이름은 두 가지입니다. 특정 IP 주소에 매핑 된 도메인을 원하십니까, 아니면 실행되는 시스템의 호스트 이름을 원하십니까?
Rob Goodwin 2014 년


var에 BASE_URL = "@ Request.Url.GetLeftPart (UriPartial.Authority) @ Url.Content ("~ / ")"
왕자 프라 사드

답변:


76

사용 Request.Url.Host이 적절 Host:합니다. HTTP 요청의 리소스 경로 부분에 호스트 이름이 포함되지 않으므로 UA (브라우저)가 원하는 호스트 이름 (도메인 이름)을 지정하는 HTTP 헤더 값을 검색하는 방법 입니다.

참고 localhost:5858도메인 이름이 아닌, 또한 호스트 이름과 TCP 포트 번호를 포함하는 "권위"로 알려진 엔드 포인트 지정자입니다. 이것은에 액세스하여 검색됩니다 Request.Uri.Authority.

또한와 비교하여 다른 사이트를 제공하도록 웹 서버를 구성 할 수 있기 때문에 에서 가져 somedomain.com오는 것은 유효하지 않습니다 . 그러나 이것이 유효한 경우라면 호스트 이름을 수동으로 구문 분석해야 합니다. 꼬집음.www.somedomain.comwww.somedomain.comsomedomain.comString.Split('.')

웹 서버 (IIS) 구성은 ASP.NET의 구성과 다르며 ASP.NET은 실제로 실행되는 웹 사이트 및 웹 응용 프로그램의 HTTP 바인딩 구성을 완전히 무시합니다. IIS와 ASP.NET이 동일한 구성 파일 ( web.config)을 공유한다는 사실은 위험합니다.


113

다음과 같이 URL의 "왼쪽 부분"을 가져 오십시오.

string domainName = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority);

이것은 당신에게 http://localhost:5858또는 https://www.somedomainname.com당신이 로컬 또는 프로덕션에 있는지 여부를 제공합니다 . www부분 을 삭제하려면 IIS를 구성해야하지만 이는 또 다른 주제입니다.

결과 URL에는 후행 슬래시가 없습니다.


7
제 생각에는 이것이 최선의 대답이 될 것입니다.
Andrew

이것은 내 필요에 따라 훌륭하게 작동했습니다. 그러나 한 가지 작은 수정 사항 : Authority 부분을 요청할 때 반환 된 문자열에 후행 경로 구분 기호가 포함되지 않습니다. 따라서 :http://localhost:60333

1
var에 BASE_URL = "@ Request.Url.GetLeftPart (UriPartial.Authority) @ Url.Content ("~ / ")"
왕자 프라 사드

이것은 Asp.Net Core 2.2에서 작동하지 않는 것 같습니다. 'HttpContext'에 'Current'에 대한 정의가 포함되어 있지 않으며 'HttpContext'유형의 첫 번째 인수를 허용하는 액세스 가능한 확장 메서드 'Current'를 찾을 수 없습니다 (using 지시문 또는 어셈블리 참조가 누락 되었습니까?).
Stian

@Stian 분명히 그것에 대답하는 또 다른 게시물이 있습니다 : stackoverflow.com/questions/31243068/… . 이 답변은 URI 부분에만 중점을 둡니다.
Arturo Torres Sánchez

39

다음은 Request.RequestUri모든 사람이 참조 할 수있는 모든 속성 의 스크린 샷입니다 .

여기에 이미지 설명 입력


18

다음 코드를 시도해 볼 수 있습니다.

 Request.Url.Host +
    (Request.Url.IsDefaultPort ? "" : ":" + Request.Url.Port)

6

www.somedomain.com 이다 도메인 / 호스트. 하위 도메인은 중요한 부분입니다. www.는 자주 사용하지 않는 것과 같은 의미로 사용되지만 동일하지 않기 때문에 규칙으로 설정해야합니다 (기본적으로 설정되어 있더라도). 같은 다른 하위 도메인을 생각해보십시오 mx.. 그것은 아마도 www..

그것을 감안할 때, 나는 이런 종류의 일을하지 않는 것이 좋습니다. 즉, 당신이 물었 기 때문에 좋은 이유가 있다고 생각합니다.

개인적으로 나는 www.이것에 대해 특별한 경우를 제안하고 싶습니다 .

string host = HttpContext.Current.Request.Url.GetComponents(UriComponents.HostAndPort, UriFormat.Unescaped);;

if (host.StartsWith("www."))
    return host.Substring(4);
else
    return host;

당신은 당신이 떨어져 잘라 하시겠습니까 정말 100 % 인 경우 그렇지 않으면, 어떤 하위 도메인을, 당신은 조금 더 복잡 뭔가를해야합니다.

string host = ...;

int lastDot = host.LastIndexOf('.');

int secondToLastDot = host.Substring(0, lastDot).LastIndexOf('.');

if (secondToLastDot > -1)
    return host.Substring(secondToLastDot + 1);
else
    return host;

항구를 얻는 것은 다른 사람들이 말한 것과 같습니다.


1

HttpContext.Current.Request.Url.Host가 올바른 값을 반환합니다. www.somedomainname.com에서 실행하면 www.somedomainname.com이 제공됩니다. 5858도 얻으려면 다음을 사용해야합니다.

HttpContext.Current.Request.Url.Port 

1

Request.ServerVariables목적은 나를 위해 작동합니다. 나는 그것을 사용하지 않을 이유를 모른다.

ServerVariables["SERVER_NAME"]그리고 ServerVariables["HTTP_URL"]당신이 찾고있는 것을 얻어야합니다


1

다음 코드를 사용하여 정규화 된 도메인 이름을 얻을 수 있습니다.

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

4
이 코드 스 니펫은 질문을 해결할 수 있지만 설명을 포함하면 게시물의 품질을 향상시키는 데 큰 도움이됩니다. 앞으로 독자를위한 질문에 답하고 있으며, 해당 사용자는 코드 제안 이유를 모를 수 있습니다.
Dr Rob Lang

1

다음은 URL의 이름을 얻는 빠르고 쉬운 방법입니다.

            var urlHost = HttpContext.Current.Request.Url.Host;

            var xUrlHost = urlHost.Split('.');
            foreach(var thing in xUrlHost)
            {
                if(thing != "www" && thing != "com")
                {
                    urlHost = thing;
                }
            }

0

이 시도:

@ Request.Url.GetLeftPart (UriPartial.Authority)


이 답변은 이것이 작동하는 이유를 자세히 설명하지 않으며 실제로 기존 답변 중 하나와 동일합니다.
Arturo Torres Sánchez

-1

하위 도메인이 있어도 MVC에서 기본 URL을 얻으려면 www.somedomain.com/subdomain다음을 수행하십시오.

var url = $"{Request.Url.GetLeftPart(UriPartial.Authority)}{Url.Content("~/")}";
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.