Obtenir le référent HTTP ASP.NET
Je cherche un moyen rapide, facile et fiable d'obtenir le HTTP Referrer du navigateur dans ASP.Net ( C # ). Je sais que le référent HTTP lui-même n'est pas fiable, mais je veux un moyen fiable d'obtenir le référent Si est présent.
8 réponses
Vous pouvez utiliser la propriété UrlReferrer de la requête en cours:
Request.UrlReferrer
Cela Lira l'en-tête HTTP Referer de la requête qui peut ou non être fournie par le client (agent utilisateur).
Utilisez la propriété Request.UrlReferrer
.
Sous les scènes, il suffit de vérifier la propriété ServerVariables("HTTP_REFERER")
.
Comme ceci: HttpRequest.UrlReferrer Propriété
Uri myReferrer = Request.UrlReferrer;
string actual = myReferrer.ToString();
Request.Headers["Referer"]
Explication
Le {[1] } lancera un System.UriFormatException
si l'en-tête HTTP referer est mal formé (ce qui peut arriver car il n'est généralement pas sous votre contrôle).
Comme pour l'utilisation de Request.ServerVariables
, par MSDN:
Demande.Collection ServerVariables
La collection ServerVariables récupère les valeurs des variables d'environnement prédéterminées et les informations d'en-tête de demande.
Demande.Propriété Headers
Obtient une collection D'en-têtes HTTP.
Request.Headers
est un meilleur choix que Request.ServerVariables
depuis Request.ServerVariables
contient toutes les variables d'environnement ainsi que les en-têtes, où Request.Headers
est une liste beaucoup plus courte qui contient uniquement les en-têtes.
La meilleure solution est donc d'utiliser la collection Request.Headers
pour lire directement la valeur. Faites attention aux avertissements de Microsoft sur l'encodage HTML de la valeur si vous allez l'afficher sur un formulaire, cependant.
Puisque Google vous emmène à ce post lors de la recherche de C# Web API Referrer
Voici l'affaire: Web API
utilise un type différent de Request
de MVC Request
normal appelé HttpRequestMessage
qui n'inclut pas UrlReferrer
. Comme une demande Web API
normale n'inclut pas cette information, Si vous en avez vraiment besoin, vous devez demander à vos clients de faire tout leur possible pour l'inclure. Bien que vous pourriez faire de cette partie de votre API Object
, une meilleure façon est d'utiliser Headers
.
Tout d'Abord, vous pouvez étendre HttpRequestMessage
pour fournir un UrlReferrer()
méthode:
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
à 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érence auxquelles vous pouvez accéder comme ceci à partir de votre Web API
:
Request.UrlReferrer();
J'utilise. Net Core 2 mvc, celui-ci fonctionne pour moi (pour obtenir la page previews):
HttpContext.Request.Headers["Referer"];
string referrer = HttpContext.Current.Request.UrlReferrer.ToString();
Parfois, vous devez donner tout le lien comme ceci
System.Web.HttpContext.Current.Request.UrlReferrer.ToString();
(en option lorsque "Current" n'est pas fondé)