.NET – Protocol, host en poort ophalen

Is er een eenvoudige manier in .NET om snel het huidige protocol, de host en de poort te krijgen? Als ik bijvoorbeeld op de volgende URL zit:

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

Ik moet terug:

http://www.mywebsite.com:80

Ik weet dat ik Request.Url.AbsoluteUrikan gebruiken om de volledige URL te krijgen, en ik weet dat ik Request.Url.Authoritykan gebruiken om de host en poort te krijgen , maar ik weet niet zeker wat de beste manier is om het protocol te verkrijgen zonder de URL-tekenreeks te ontleden.

Heeft u suggesties?


Antwoord 1, autoriteit 100%

Hoewel @Rick het geaccepteerde antwoord op deze vraag heeft, is er eigenlijk een kortere manier om dit te doen, met de slecht genoemde Uri.GetLeftPart()methode.

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

Er is echter één nadeel aan GetLeftPart(). Als de poort de standaardpoort voor het schema is, wordt deze verwijderd. Aangezien poort 80 de standaardpoort is voor http, is de uitvoer van GetLeftPart()in mijn voorbeeld hierboven http://www.mywebsite.com.

Als het poortnummer iets anders dan 80 was geweest, zou het in het resultaat worden opgenomen.


Antwoord 2, autoriteit 42%

De volgende (C#) code zou het moeten doen

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

Antwoord 3, autoriteit 15%

Als je dit doet in Asp.Net of toegang hebt tot HttpContext.Current.Request
Ik zou zeggen dat dit eenvoudigere en algemenere manieren zijn om ze te krijgen:

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

Ik hoop dat dit helpt. 🙂


Antwoord 4, autoriteit 9%

Een meer gestructureerde manier om dit te krijgen is door UriBuilder te gebruiken. Dit voorkomt directe manipulatie van strings.

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

Antwoord 5, autoriteit 5%

Request.Url zal u de Urivan de verzoek. Als je dat eenmaal hebt, kun je vrijwel alles ophalen wat je maar wilt. Om het protocol te krijgen, roept u de eigenschap Schemeaan.

Voorbeeld:

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

Hopelijk helpt dit.


Antwoord 6, autoriteit 5%

Nog kortere weg, kan nieuwere ASP.Net vereisen:

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

Met de UriComponents-enum kunt u specificeren welke component(en) van de URI u wilt opnemen.


Antwoord 7, autoriteit 3%

Zeer vergelijkbaar met het antwoord van Holger. Als je de URL moet pakken, kun je zoiets doen als:

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

De Uri-klassebiedt een hele reeks methoden, waarvan ik er veel niet heb opgesomd.

In mijn geval moest ik LocalHostsamen met het Port Numberpakken, dus dit is wat ik deed:

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

Die met succes greep: http://localhost:12345

Other episodes