ASP.NET에서 루트 도메인 URI를 얻으려면 어떻게해야합니까?


98

http://www.foobar.com 에서 웹 사이트를 호스팅한다고 가정 해 보겠습니다 .

내 코드 뒤에있는 " http://www.foobar.com/ "을 프로그래밍 방식으로 확인할 수있는 방법이 있습니까 (예 : 웹 구성에서 하드 코딩 할 필요없이)?


7
요청에 따라 다르므로 Request개체를 살펴볼 수 있습니다 .
John Saunders

답변:


81

HttpContext.Current.Request.Url 은 URL에 대한 모든 정보를 얻을 수 있습니다. 그리고 URL을 조각으로 나눌 수 있습니다.


4
예, 왜 반대표가 필요합니까? 답변으로 표시된 항목을 보지 마십시오. : /
Zack

4
나는 또한이 대답이 마음에 들지 않습니다. ... 대답으로 blesh는 오른쪽 하나를 주신이가 표시되어 있어야합니다
마이클 B.를

-1-Request.Url은 종종 "/ folder1 / folder2"와 같은 URL을 제공하고 도메인을 모두 제외합니다.
Justin

4
@Justin : Request.Url은 모든 조각을 세분화 한 Uri 개체를 제공합니다. 그것은 당신에게 문자열을 제공해서는 안됩니다. 적어도 내가 사용하고있는 .net 버전은 아닙니다
JoshBerke

6
이 대답은 ... 그것은 그 많은 표를 가지고 아래의 대답처럼 작동하게하는 코드를 추가하여 개선 될 수
theJerm

172
string baseUrl = Request.Url.GetLeftPart(UriPartial.Authority);

Uri :: GetLeftPart 메서드 :

GetLeftPart 메서드는 URI 문자열의 가장 왼쪽 부분이 포함 된 문자열을 반환하며 part로 지정된 부분으로 끝납니다.

UriPartial 열거 형 :

URI의 체계 및 권한 세그먼트.


5
Url을 구문 분석하는 것보다 훨씬 좋습니다!
Evgenyt 2013

1
이것이 최고의 답변입니다! tnx!
AminM 2013 년

이것은 선택된 답변이어야합니다. 불필요한 문자열 조작이 너무 많습니다.
Ghasan 2015

1
이 방법을 사용하면 http : // www.lala.xxx/blah/blah가 http : // www.lala.xxx를 반환합니다.
live-love

+1 그리고 내가 localhost에서 만든 테스트에서 프로토콜 (http : //) 부분을 벗어난 .Authority와는 다릅니다.
GGleGrand

122

여전히 궁금한 사람은 http://devio.wordpress.com/2009/10/19/get-absolut-url-of-asp-net-application/ 에서 더 완전한 답변을 얻을 수 있습니다 .

public string FullyQualifiedApplicationPath
{
    get
    {
        //Return variable declaration
        var appPath = string.Empty;

        //Getting the current context of HTTP request
        var context = HttpContext.Current;

        //Checking the current context content
        if (context != null)
        {
            //Formatting the fully qualified website url/name
            appPath = string.Format("{0}://{1}{2}{3}",
                                    context.Request.Url.Scheme,
                                    context.Request.Url.Host,
                                    context.Request.Url.Port == 80
                                        ? string.Empty
                                        : ":" + context.Request.Url.Port,
                                    context.Request.ApplicationPath);
        }

        if (!appPath.EndsWith("/"))
            appPath += "/";

        return appPath;
    }
}

4
완벽하게 작동했습니다. 사이트가 server : 8080 / MySiteName 이면 올바르게 가져옵니다.
Michael La Voie

2
다른 곳에서 링크 대신 실제 코드를 공유해 주셔서 감사합니다.
theJerm

2
context.Request.Url.Port == 80은 HTTPS 내에서 문제를 일으킬 것입니다
Evgenyt 2013

7
주의! https에서는 작동하지 않습니다. HTTPS를 들어 교체 할 필요 context.Request.Url.Port == 80 에 의해 (context.Request.Url.Port == 80 && context.Request.Url.Scheme == "http") || (context.Request.Url.Port == 443 && context.Request.Url.Scheme == "https")또는 사용 대답 아래
razon

1
localhost에서도 작동합니다 (로컬을 테스트하는 경우). 포트가 필요하지 않은 경우 "http : //"+ HttpContext.Current.Request.Url.Host를 사용할 수 있습니다.
CyberHawk 2015 년

34

예제 URL이 http://www.foobar.com/Page1 인 경우

HttpContext.Current.Request.Url; //returns "http://www.foobar.com/Page1"


HttpContext.Current.Request.Url.Host; //returns "www.foobar.com"


HttpContext.Current.Request.Url.Scheme; //returns "http/https"


HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority); //returns "http://www.foobar.com"

1
아니 아니야. .Host"http://www.foobar.com/Page1"www.foobar.com아닙니다 foobar.com.
tchelidze

1
예, 맞습니다. 답변을 업데이트했습니다. 덕분에 @tchelidze
Dheeraj Palagiri에게

27
string hostUrl = Request.Url.Scheme + "://" + Request.Url.Host; //should be "http://hostnamehere.com"

16

전체 요청 URL 문자열을 얻으려면 :

HttpContext.Current.Request.Url

요청의 www.foo.com 부분을 얻으려면 :

HttpContext.Current.Request.Url.Host

어느 정도는 ASP.NET 응용 프로그램 외부의 요인에 따라 결정됩니다. IIS가 응용 프로그램에 대해 여러 또는 임의의 호스트 헤더를 허용하도록 구성된 경우 DNS를 통해 응용 프로그램으로 확인 된 모든 도메인은 사용자가 입력 한 URL에 따라 요청 URL로 표시 될 수 있습니다.


1
여기에 간단한 해결책
full_prog_full

4
Match match = Regex.Match(host, "([^.]+\\.[^.]{1,3}(\\.[^.]{1,3})?)$");
string domain = match.Groups[1].Success ? match.Groups[1].Value : null;

host.com => host.com 반환 s.host.com
=> host.com 반환

host.co.uk => host.co.uk 반환
www.host.co.uk => host.co.uk 반환
s1.www.host.co.uk => host.co.uk 반환


나는 이것이 오래된 게시물이라는 것을 알고 있지만 NQuenault를 훌륭하게 수행했습니다. 나는 Regex Expressions를 잘하지 못합니다. 정확히 내가 필요한 것.
JeffreyJ 2015 년

@nquenault www.abc.com과 같은 호스트 이름을 가장 잘 처리하는 방법에 대한 생각이 있습니까? 감사!
Gary Ewan Park

4

-포트를 추가하면 IIS Express를 실행할 때 도움이 될 수 있습니다.

Request.Url.Scheme + "://" + Request.Url.Host + ":" + Request.Url.Port


3

나는 이것이 오래되었다는 것을 알고 있지만 지금 이것을하는 올바른 방법은

string Domain = HttpContext.Current.Request.Url.Authority

서버용 포트가있는 DNS 또는 IP 주소를 가져옵니다.



1

아래 C # 예제 :

string scheme = "http://";
string rootUrl = default(string);
if (Request.ServerVariables["HTTPS"].ToString().ToLower() == "on")
{
  scheme = "https://";
}
rootUrl = scheme + Request.ServerVariables["SERVER_NAME"].ToString();

1
string host = Request.Url.Host;
Regex domainReg = new Regex("([^.]+\\.[^.]+)$");
HttpCookie cookie = new HttpCookie(cookieName, "true");
if (domainReg.IsMatch(host))
{
  cookieDomain = domainReg.Match(host).Groups[1].Value;                                
}

1

이것은 당신이 요구하는 것을 구체적으로 반환합니다.

Dim mySiteUrl = Request.Url.Host.ToString()

나는 이것이 오래된 질문이라는 것을 알고 있습니다. 그러나 나는 똑같은 간단한 대답이 필요했고 이것은 (http : //없이) 요청 된 것을 정확하게 반환합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.