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

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

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

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

내 URL은 localhost:5858있지만 localhost.

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

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

www.somedomainname.com

난 갖길 원해 somedomainname.com

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



답변

사용 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)을 공유한다는 사실은 위험합니다.


답변

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

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

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

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


답변

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

여기에 이미지 설명 입력


답변

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

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


답변

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;

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


답변

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

HttpContext.Current.Request.Url.Port


답변

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

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