Ich muss in der Lage sein, um die vollständige URL der Seite, die ich von einem Benutzersteuerelement bin. Ist es nur eine Frage der Aneinanderreihung mehrerer Request-Variablen? Wenn ja, welche? Oder gibt es einen einfacheren Weg?Wie bekomme ich die vollständige URL der Seite Ich bin in C#
Antwort
Normalerweise verwende ich Request.Url.ToString()
, um die vollständige URL (einschließlich Querystring), keine Verkettung erforderlich.
Wenn die URL '#' enthält, werden alle Zeichen nach # nicht berücksichtigt. –
@KrunalSisodiya Ich glaube nicht, dass der Hash einer URL jemals an den Server gesendet wird, aber ich könnte falsch liegen. – travis
'Request.Url.ToString()' ist nicht include queryString. –
Request.RawUrl
dies gibt nicht die volle url zurück. Wenn die vollständige URL http://www.blah.com/1.1/home/main?a=1 Request.RawUrl wird 1.1/hom/main zurückgeben? A = 1 – jnoreiga
, wenn Sie die vollständige URL wie alles aus dem http die Abfragezeichen benötigen Sie die folgenden Variablen
Request.ServerVariables("HTTPS") // to check if it's HTTP or HTTPS
Request.ServerVariables("SERVER_NAME")
Request.ServerVariables("SCRIPT_NAME")
Request.ServerVariables("QUERY_STRING")
Dies berücksichtigt nicht standardmäßige Ports (dh nicht Port 80 für HTTP verwenden) – Spongeboy
Sie könnten Request.ServerVariables ("SERVER_PORT") für die Porterkennung verwenden! – armen
Beachten Sie, dass diese Antwort die VB.Net-Syntax verwendet. Verwenden Sie in C# beispielsweise Request.ServerVariables ["HTTPS"]. – jaycer
Danke Jungs verketten müssen, habe ich eine Kombination aus beidem Ihre Antworten @Christian und @ Jonathan für meine spezifischen Bedürfnisse.
"http://" + Request.ServerVariables["SERVER_NAME"] + Request.RawUrl.ToString()
Ich brauche nicht über eine sichere http Sorge, notwendig, um die Servervariable und die RawUrl behandeln den Weg von dem Domain-Namen und schließen die Abfragezeichenfolgeflag falls vorhanden.
Sie sollten auch wissen, dass RawUrl, im Gegensatz zu Anfrage.URL, stellt die ursprüngliche nicht zugeordnete Anforderungs-URL dar, 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 man direkt eingruppiert. Es fehlt auch ein einfacher HTTP-zu-einem anderen-Port. – user2864740
Request.Url.AbsoluteUri
Diese Eigenschaft macht alles, was Sie brauchen, alles in einem einzigen Anruf.
+1. Dies ist die beste Antwort. Sollte über Request.Url.ToString() bevorzugt werden. –
* sucint * ...... – Unbreakable
Wenn Sie die Portnummer auch 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;
}
Hier ist eine Liste, die ich normalerweise für diese Art von Informationen beziehen sich auf:
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 das nützlich!
1) Es gibt auch Request.RawUrl; 2) Request.Url kann eine Exception auf 'sehr schlecht angeforderte Pfade' werfen. – user2864740
Sehr hilfreiche Antwort, aber sollten die Portnummern nicht konsistent sein, um Verwechslungen zu vermeiden (vorausgesetzt, dass alle Beispiele für die gleiche Anfrage sind? ZB Authority und Port import 80 aber AbsoluteUri port 2000) –
'Request.QueryString' returns' q = nur qvalue – Marcel
besser zu nutzen Request.Url.OriginalString
als Request.Url.ToString()
(nach MSDN)
Es ist nur besser, wenn Sie wirklich die ursprüngliche Zeichenfolge benötigen. – Dirk
@DirkThe von Link zu MSDN oben: "Von der ToString-Methode zurückgegebener String enthält möglicherweise Steuerzeichen, die den Status einer Konsolenanwendung beschädigen können. Sie können die GetComponents-Methode mit dem UriFormat.SafeUnescaped-Format verwenden, um Steuerzeichen aus dem zurückgegebenen zu entfernen Zeichenfolge. " – Eni
Genau, und das hat nichts mit 'OriginalString' zu tun. – Dirk
Für ASP.NET Core
Sie werden es brauchen buchstabieren:
@($"{Context.Request.Scheme}://{Context.Request.Host}{Context.Request.Path}{Context.Request.QueryString}")
Oder Sie können eine using-Anweisung zu Ihrer Ansicht hinzuzufügen:
@using Microsoft.AspNetCore.Http.Extensions
dann
@Context.Request.GetDisplayUrl()
Die _ViewImports.cshtml
könnte zu einem besseren Ort für diese @using
Für jeden in einem lastausgeglichenen Webfarm sein .. die Portnummer passen, die, wenn System.Url mit angezeigt: http://stackoverflow.com/questions/7674850/get -original-url-ohne-nicht-standard-port-c – felickz