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.AbsoluteUri
kan gebruiken om de volledige URL te krijgen, en ik weet dat ik Request.Url.Authority
kan 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 LocalHost
samen met het Port Number
pakken, 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