[.net] .NET-프로토콜, 호스트 및 포트 가져 오기

.NET에서 현재 프로토콜, 호스트 및 포트를 신속하게 얻는 간단한 방법이 있습니까? 예를 들어 다음 URL에있는 경우 :

http://www.mywebsite.com:80/pages/page1.aspx

나는 돌아와야한다 :

http://www.mywebsite.com:80

나는 내가 사용할 수 있다는 것을 안다 Request.Url.AbsoluteUri 전체 URL을 얻을, 나는 내가 사용할 수 있습니다 알고 Request.Url.Authority호스트와 포트를 얻기 위해,하지만 난 URL 문자열을 구문 분석하지 않고 프로토콜을 얻을 수있는 가장 좋은 방법을 모르겠어요.

어떤 제안?



답변

다음 (C #) 코드는 트릭을 수행해야합니다.

Uri uri = new Uri("http://www.mywebsite.com:80/pages/page1.aspx");
string requested = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;


답변

@Rick 이이 질문에 대한 대답을 받아 들였지만 실제로 이름이 잘못된 방법을 사용하여이를 수행하는 더 짧은 방법이 Uri.GetLeftPart()있습니다.

Uri url = new Uri("http://www.mywebsite.com:80/pages/page1.aspx");
string output = url.GetLeftPart(UriPartial.Authority);

GetLeftPart()그러나 하나의 캐치가 있습니다. 포트가 구성표의 기본 포트이면 제거됩니다. 포트 80은 http의 기본 포트이므로 GetLeftPart()위의 예에서 출력 은 다음과 같습니다.http://www.mywebsite.com .

포트 번호가 80이 아닌 다른 포트 번호 인 경우 결과에 포함됩니다.


답변

Asp.Net 에서이 작업을 수행하거나 HttpContext.Current.Request에 액세스 할 수 있다면 더 쉽고 일반적인 방법입니다.

var scheme = Request.Url.Scheme; // will get http, https, etc.
var host = Request.Url.Host; // will get www.mywebsite.com
var port = Request.Url.Port; // will get the port
var path = Request.Url.AbsolutePath; // should get the /pages/page1.aspx part, can't remember if it only get pages/page1.aspx

이게 도움이 되길 바란다. 🙂


답변

이것을 얻는 더 체계적인 방법은 UriBuilder를 사용하는 것입니다. 이것은 직접적인 문자열 조작을 피합니다.

var builder = new UriBuilder(Request.Url.Scheme, Request.Url.Host, Request.Url.Port);


답변

Request.Url은 요청 의 Uri 를 반환합니다 . 일단 가지고 있으면 원하는 것을 거의 얻을 수 있습니다. 프로토콜을 얻으려면 Scheme을 호출하십시오. 속성을 .

견본:

Uri url = Request.Url;
string protocol = url.Scheme;

도움이 되었기를 바랍니다.


답변

더 짧은 방법 일지라도 최신 ASP.Net이 필요할 수 있습니다.

string authority = Request.Url.GetComponents(UriComponents.SchemeAndServer,UriFormat.Unescaped)

UriComponents 열거 형을 사용하면 포함 할 URI의 구성 요소를 지정할 수 있습니다.


답변

Holger의 답변과 매우 유사합니다. URL을 가져와야 할 경우 다음과 같은 작업을 수행 할 수 있습니다.

Uri uri = Context.Request.Url;
var scheme = uri.Scheme // returns http, https
var scheme2 = uri.Scheme + Uri.SchemeDelimiter; // returns http://, https://
var host = uri.Host; // return www.mywebsite.com
var port = uri.Port; // returns port number

열린 우리당 클래스 내가 나열되지 않은 방법의 전체 범위, 많은을 제공합니다.

내 경우에는와 LocalHost함께 가져 가야했기 Port Number때문에 이것이 내가 한 일입니다.

var Uri uri = Context.Request.Url;
var host = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port; 

성공적으로 잡은 것 : http://localhost:12345