Wie erhalte ich in C# die vollständige URL der Seite, auf der ich mich befinde?
-
09-06-2019 - |
Frage
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 Request-Variablen miteinander zu verketten?Wenn ja, welche?Oder gibt es einen einfacheren Weg?
Lösung
Normalerweise benutze ich Request.Url.ToString()
Um die vollständige URL (einschließlich Abfragezeichenfolge) zu erhalten, ist keine Verkettung erforderlich.
Andere Tipps
Hier ist eine Liste, auf die ich normalerweise für diese Art von Informationen verweise:
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!
Request.Url.AbsoluteUri
Diese Immobilie bietet alles, was Sie brauchen, alles in einem kurzen Anruf.
Request.RawUrl
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")
Für ASP.NET Core
Sie 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()
Der _ViewImports.cshtml
könnte ein besserer Ort dafür sein @using
Besser zu verwenden Request.Url.OriginalString
als Request.Url.ToString()
(entsprechend MSDN)
Danke Leute, ich habe für meinen speziellen Bedarf eine Kombination Ihrer beiden Antworten @Christian und @Jonathan verwendet.
"http://" + Request.ServerVariables["SERVER_NAME"] + Request.RawUrl.ToString()
Ich muss mir keine Gedanken über sicheres http machen, ich benötige die Servername-Variable und die RawUrl verarbeitet den Pfad vom Domänennamen und schließt die Abfragezeichenfolge ein, falls vorhanden.
Wenn Sie auch die Portnummer benötigen, können Sie diese 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;
}
Versuche Folgendes -
var FullUrl = Request.Url.AbsolutePath.ToString();
var ID = FullUrl.Split('/').Last();