Wie erhalte ich die vollständige URL der Seite, auf der ich mich in C # befinde?


163

Ich muss in der Lage sein, über ein Benutzersteuerelement auf die vollständige URL der Seite zuzugreifen, auf der ich mich befinde. Geht es nur darum, eine Reihe von Anforderungsvariablen miteinander zu verketten? Wenn ja, welche? Oder gibt es einen einfacheren Weg?


5
Für alle in einer Webfarm mit Lastenausgleich. Achten Sie auf die Portnummer, die bei Verwendung von System.Url angezeigt wird: stackoverflow.com/questions/7674850/…
felickz

Antworten:


155

Normalerweise verwende ich Request.Url.ToString(), um die vollständige URL (einschließlich Querystring) zu erhalten, ohne dass eine Verkettung erforderlich ist.


2
Wenn die URL '#' enthält, werden nicht alle Zeichen nach # eingeschlossen.
Krunal Sisodiya

5
@KrunalSisodiya Ich glaube nicht, dass der Hash einer URL jemals an den Server gesendet wird, aber ich könnte mich irren.
Travis

Request.Url.ToString()ist nicht enthalten queryString.
Yogesh Patel

320

Hier ist eine Liste, auf die ich mich normalerweise für diese Art von Informationen beziehe:

Request.ApplicationPath :   /virtual_dir
Request.CurrentExecutionFilePath :  /virtual_dir/webapp/page.aspx
Request.FilePath :  /virtual_dir/webapp/page.aspx
Request.Path :  /virtual_dir/webapp/page.aspx
Request.PhysicalApplicationPath :   d:\Inetpub\wwwroot\virtual_dir\
Request.QueryString :   /virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.AbsolutePath :  /virtual_dir/webapp/page.aspx
Request.Url.AbsoluteUri :   http://localhost:2000/virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.Host :  localhost
Request.Url.Authority : localhost:80
Request.Url.LocalPath : /virtual_dir/webapp/page.aspx
Request.Url.PathAndQuery :  /virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.Port :  80
Request.Url.Query : ?q=qvalue
Request.Url.Scheme :    http
Request.Url.Segments :  /
    virtual_dir/
    webapp/
    page.aspx

Hoffentlich finden Sie dies nützlich!


1
1) Es gibt auch Request.RawUrl; 2) Request.Url kann eine Ausnahme für 'sehr schlecht angeforderte Pfade' auslösen.
user2864740

Sehr hilfreiche Antwort, aber sollten die Portnummern nicht konsistent sein, um Verwirrung zu vermeiden (vorausgesetzt, alle Beispiele beziehen sich auf dieselbe Anfrage? ZB implizieren Autorität und Port Port 80, aber AbsoluteUri enthält Port 2000)
Young Bob

Request.QueryStringkehrt q=qvaluenur zurück
Marcel

74
Request.Url.AbsoluteUri

Diese Eigenschaft erledigt alles, was Sie brauchen, alles in einem kurzen Aufruf.


6
+1. Dies ist die beste Antwort. Sollte Request.Url.ToString () vorgezogen werden.
Todd Menier

10

Denn ASP.NET CoreSie müssen es buchstabieren:

@($"{Context.Request.Scheme}://{Context.Request.Host}{Context.Request.Path}{Context.Request.QueryString}")

Oder Sie können Ihrer Ansicht eine using-Anweisung hinzufügen:

@using Microsoft.AspNetCore.Http.Extensions

dann

@Context.Request.GetDisplayUrl()

Das _ViewImports.cshtmlkönnte ein besserer Ort dafür sein@using


1
Vielen Dank. Das hat geholfen!
FlyingV


9

Wenn Sie die vollständige URL vom http bis zum Querystring benötigen, müssen Sie die folgenden Variablen verketten

Request.ServerVariables("HTTPS") // to check if it's HTTP or HTTPS
Request.ServerVariables("SERVER_NAME") 
Request.ServerVariables("SCRIPT_NAME") 
Request.ServerVariables("QUERY_STRING")

2
Dies berücksichtigt nicht nicht standardmäßige Ports (dh nicht Port 80 für http verwenden)
Spongeboy

1
Sie können Request.ServerVariables ("SERVER_PORT") zur Porterkennung verwenden!
Armen

1
Beachten Sie, dass diese Antwort die VB.Net-Syntax verwendet. Verwenden Sie in C # beispielsweise Request.ServerVariables ["HTTPS"].
Jaycer

7

Besser zu bedienen Request.Url.OriginalStringals Request.Url.ToString()(laut MSDN )


Es ist nur besser, wenn Sie wirklich die Originalzeichenfolge benötigen.
Dirk

@DirkThe from-Link zu MSDN oben: "Die von der ToString-Methode zurückgegebene Zeichenfolge kann Steuerzeichen enthalten, die den Status einer Konsolenanwendung beschädigen können. Sie können die GetComponents-Methode mit dem Format UriFormat.SafeUnescaped verwenden, um Steuerzeichen aus der zurückgegebenen Zeichenfolge zu entfernen . "
Eni

Genau, und das hat nichts damit zu tun OriginalString.
Dirk

5

Vielen Dank, ich habe eine Kombination Ihrer beiden Antworten @Christian und @Jonathan für meine spezifischen Bedürfnisse verwendet.

"http://" + Request.ServerVariables["SERVER_NAME"] +  Request.RawUrl.ToString()

Ich muss mich nicht um sichere http kümmern, brauchte die Servername-Variable und die RawUrl behandelt den Pfad vom Domain-Namen und enthält den Querystring, falls vorhanden.


2
Sie sollten auch wissen, dass RawUrl im Gegensatz zu Request.Url die ursprüngliche, nicht zugeordnete Anforderungs-URL darstellt, wenn die URL-Zuordnung verwendet wird.
Harpo

SERVER_NAME gibt häufig nicht die vom Client verwendete "echte" URL zurück. HTTP_HOST ist wahrscheinlich die bessere Form, wenn Sie direkt eingreifen möchten. Außerdem fehlt einfaches HTTP-zu-einem-anderen-Port.
user2864740

1

Wenn Sie auch die Portnummer benötigen, können Sie verwenden

Request.Url.Authority

Beispiel:

string url = Request.Url.Authority + HttpContext.Current.Request.RawUrl.ToString();

if (Request.ServerVariables["HTTPS"] == "on")
{
    url = "https://" + url;
}
else 
{
    url = "http://" + url;
}

1

Versuche Folgendes -

var FullUrl = Request.Url.AbsolutePath.ToString();
var ID = FullUrl.Split('/').Last();
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.