[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.com
www.somedomain.com
somedomain.com
String.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.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"]
당신이 찾고있는 것을 얻어야합니다