.NET – Protokoll, Host und Port abrufen
Frage
Gibt es in .NET eine einfache Möglichkeit, schnell das aktuelle Protokoll, den aktuellen Host und den aktuellen Port abzurufen?Wenn ich mich beispielsweise auf der folgenden URL befinde:
http://www.mywebsite.com:80/pages/page1.aspx
Ich muss zurückgeben:
http://www.mywebsite.com:80
Ich weiß, dass ich es gebrauchen kann Request.Url.AbsoluteUri
um die vollständige URL zu erhalten, und ich weiß, dass ich sie verwenden kann Request.Url.Authority
um den Host und den Port abzurufen, aber ich bin mir nicht sicher, wie ich das Protokoll am besten erhalten kann, ohne die URL-Zeichenfolge auszuwerten.
Irgendwelche Vorschläge?
Lösung
Der folgende (C#)-Code sollte den Zweck erfüllen
Uri uri = new Uri("http://www.mywebsite.com:80/pages/page1.aspx");
string requested = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;
Andere Tipps
Obwohl @Rick die akzeptierte Antwort auf diese Frage hat, gibt es tatsächlich eine kürzere Möglichkeit, dies zu tun, indem man die schlecht benannte verwendet Uri.GetLeftPart()
Methode.
Uri url = new Uri("http://www.mywebsite.com:80/pages/page1.aspx");
string output = url.GetLeftPart(UriPartial.Authority);
Es gibt einen Haken GetLeftPart()
, Jedoch.Wenn der Port der Standardport für das Schema ist, wird er entfernt.Da Port 80 der Standardport für http ist, wird die Ausgabe von GetLeftPart()
in meinem Beispiel oben wird es sein http://www.mywebsite.com
.
Wenn die Portnummer etwas anderes als 80 gewesen wäre, wäre sie im Ergebnis enthalten.
Nun, wenn Sie dies in ASP.NET tun oder Zugriff auf httpcontext.current.request haben, würde ich sagen, dass dies einfachere und allgemeinere Möglichkeiten sind, sie zu bekommen:
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
Ich hoffe das hilft.:) :)
Eine strukturiertere Möglichkeit, dies zu erreichen, ist die Verwendung von UriBuilder.Dies vermeidet eine direkte String-Manipulation.
var builder = new UriBuilder(Request.Url.Scheme, Request.Url.Host, Request.Url.Port);
Noch kürzerer Weg, möglicherweise neueres ASP.Net erforderlich:
string authority = Request.Url.GetComponents(UriComponents.SchemeAndServer,UriFormat.Unescaped)
Mit der UriComponents-Enumeration können Sie angeben, welche Komponente(n) des URI Sie einschließen möchten.
Sehr ähnlich zu Holgers Antwort.Wenn Sie die URL abrufen müssen, können Sie Folgendes tun:
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
Der Uri-Klasse bietet eine ganze Reihe von Methoden, von denen ich viele nicht aufgelistet habe.
In meinem Fall musste ich greifen LocalHost
zusammen mit Port Number
, also habe ich Folgendes getan:
var Uri uri = Context.Request.Url;
var host = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;
Was erfolgreich gepackt hat: http://localhost:12345