.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.cerrent에 액세스 할 수 있다면, 이들은 더 쉽고 일반적인 방법이라고 말하고 있습니다.
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);
더 짧은 방법이라도 최신 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