문제

.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);

Request.Url은 다음을 반환합니다. 유리 요청의.일단 그것을 갖고 나면, 당신이 원하는 거의 모든 것을 검색할 수 있습니다.프로토콜을 얻으려면 계획 재산.

견본:

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top