Je dois pouvoir accéder à l'URL complète de la page sur laquelle je me trouve à partir d'un contrôle utilisateur. S'agit-il simplement de concaténer un ensemble de variables Request? Si oui, lesquels? Ou y a-t-il un moyen plus simple?
Je dois pouvoir accéder à l'URL complète de la page sur laquelle je me trouve à partir d'un contrôle utilisateur. S'agit-il simplement de concaténer un ensemble de variables Request? Si oui, lesquels? Ou y a-t-il un moyen plus simple?
Réponses:
J'utilise généralement Request.Url.ToString()
pour obtenir l'url complète (y compris la chaîne de requête), aucune concaténation n'est requise.
Request.Url.ToString()
n'inclut pas queryString.
Voici une liste à laquelle je me réfère normalement pour ce type d'informations:
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
J'espère que vous trouverez cela utile!
Request.QueryString
retours q=qvalue
seulement
Request.Url.AbsoluteUri
Cette propriété fait tout ce dont vous avez besoin, le tout en un seul appel.
Car ASP.NET Core
vous devrez le préciser:
@($"{Context.Request.Scheme}://{Context.Request.Host}{Context.Request.Path}{Context.Request.QueryString}")
Ou vous pouvez ajouter une instruction using à votre vue:
@using Microsoft.AspNetCore.Http.Extensions
puis
@Context.Request.GetDisplayUrl()
Le _ViewImports.cshtml
pourrait être un meilleur endroit pour ça@using
Request.RawUrl
si vous avez besoin de l'URL complète comme tout, du http à la chaîne de requête, vous devrez concaténer les variables suivantes
Request.ServerVariables("HTTPS") // to check if it's HTTP or HTTPS
Request.ServerVariables("SERVER_NAME")
Request.ServerVariables("SCRIPT_NAME")
Request.ServerVariables("QUERY_STRING")
Mieux vaut utiliser Request.Url.OriginalString
que Request.Url.ToString()
(selon MSDN )
OriginalString
.
Merci les gars, j'ai utilisé une combinaison de vos réponses @Christian et @Jonathan pour mon besoin spécifique.
"http://" + Request.ServerVariables["SERVER_NAME"] + Request.RawUrl.ToString()
Je n'ai pas besoin de m'inquiéter du HTTP sécurisé, j'avais besoin de la variable servername et le RawUrl gère le chemin du nom de domaine et inclut la chaîne de requête si elle est présente.
Si vous avez également besoin du numéro de port, vous pouvez utiliser
Request.Url.Authority
Exemple:
string url = Request.Url.Authority + HttpContext.Current.Request.RawUrl.ToString();
if (Request.ServerVariables["HTTPS"] == "on")
{
url = "https://" + url;
}
else
{
url = "http://" + url;
}
Essayez ce qui suit -
var FullUrl = Request.Url.AbsolutePath.ToString();
var ID = FullUrl.Split('/').Last();