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é)