Je recherche un moyen rapide, facile et fiable d’obtenir le navigateur HTTP Referrer dans ASP.Net (C #). Je sais que le référent HTTP lui-même n'est pas fiable, mais je souhaite un moyen fiable d'obtenir le référent s'il est présent .
Vous pouvez utiliser la propriété rlReferrer de la requête en cours:
Request.UrlReferrer
Ceci lira l'en-tête HTTP Referer HTTP de la requête, qui peut ou non être fourni par le client (agent utilisateur).
Utilisez la propriété Request.UrlReferrer
.
Sous les scènes, il ne fait que vérifier la propriété ServerVariables("HTTP_REFERER")
.
Request.Headers["Referer"]
Le Request.UrlReferer
jettera un System.UriFormatException
si l'en-tête HTTP du référent est mal formé (ce qui peut arriver car il n'est généralement pas sous votre contrôle).
Quant à l'utilisation de Request.ServerVariables
, par MSDN:
Collection Request.ServerVariables
La collection ServerVariables extrait les valeurs de variables d'environnement prédéterminées et les informations d'en-tête de demande.
propriété Request.Headers
Obtient une collection d'en-têtes HTTP.
Request.Headers
est un meilleur choix que Request.ServerVariables
, puisque Request.ServerVariables
contient toutes les variables d’environnement ainsi que les en-têtes, où Request.Headers
est une liste beaucoup plus courte qui ne contient que les en-têtes.
La meilleure solution consiste donc à utiliser le Request.Headers
collection pour lire la valeur directement. Tenez compte des avertissements de Microsoft concernant le codage HTML de la valeur si vous souhaitez l’afficher sur un formulaire.
Comme ceci: propriété HttpRequest.UrlReferrer
Uri myReferrer = Request.UrlReferrer;
string actual = myReferrer.ToString();
Puisque Google vous emmène à ce poste lorsque vous recherchez C# Web API Referrer
, Voici le deal: Web API
Utilise un type de Request
différent de celui de MVC Request
Normal appelé HttpRequestMessage
qui n'inclut pas UrlReferrer
. Puisqu'une demande normale Web API
N'inclut pas cette information, si vous en avez vraiment besoin, vos clients doivent faire tout ce qui est en leur pouvoir pour l'inclure. Bien que vous puissiez en faire une partie de votre API Object
, Un meilleur moyen consiste à utiliser Headers
.
Premièrement, vous pouvez étendre HttpRequestMessage
pour fournir une méthode UrlReferrer()
:
public static string UrlReferrer(this HttpRequestMessage request)
{
return request.Headers.Referrer == null ? "unknown" : request.Headers.Referrer.AbsoluteUri;
}
Ensuite, vos clients doivent définir le Referrer Header
Sur leur API Request
:
// Microsoft.AspNet.WebApi.Client
client.DefaultRequestHeaders.Referrer = new Uri(url);
Et maintenant, le Web API Request
Inclut les données de référent auxquelles vous pouvez accéder comme ceci depuis votre Web API
:
Request.UrlReferrer();
J'utilise .Net Core 2 mvc, celui-ci fonctionne pour moi (pour obtenir la page des aperçus):
HttpContext.Request.Headers["Referer"];
string referrer = HttpContext.Current.Request.UrlReferrer.ToString();
Parfois, vous devez donner tout le lien comme celui-ci
System.Web.HttpContext.Current.Request.UrlReferrer.ToString();
(en option lorsque "en cours" non fondé)
Appartenant à une autre réponse, j’ai ajouté une clause de condition pour obtenir la valeur null.
string ComingUrl = "";
if (Request.UrlReferrer != null)
{
ComingUrl = System.Web.HttpContext.Current.Request.UrlReferrer.ToString();
}
else
{
ComingUrl = "Direct"; // Your code
}