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?

War es hilfreich?

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

Request.Url gibt Ihnen die zurück Uri der Anfrage.Sobald Sie das haben, können Sie so ziemlich alles abrufen, was Sie wollen.Um das Protokoll zu erhalten, rufen Sie an Planen Eigentum.

Probe:

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

Hoffe das hilft.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top