Je recherche un moyen rapide, simple et fiable d'obtenir le référent HTTP 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 s'il est présent.
Je recherche un moyen rapide, simple et fiable d'obtenir le référent HTTP 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 s'il est présent.
Réponses:
Vous pouvez utiliser la propriété UrlReferrer de la requête actuelle:
Request.UrlReferrer
Cela lira l' en-tête HTTP Referer à partir de la requête qui peut ou non être fournie par le client (agent utilisateur).
Request.UrlReferreraprès une publication côté serveur. Bien sûr, Request.UrlReferreraura maintenant la valeur de la page sur laquelle vous postez. Dans la plupart des cas, les utilisateurs ont besoin de la page précédente. Dans ce cas, assurez-vous de stocker la page précédente dans, par exemple, une variable viewstate lorsque la page se charge pour la première fois. Et puis, lorsque vous accédez à cette variable, elle a la page précédente d'où vous venez. Par exemple, dans l'événement de chargement de page des formulaires asp.net, vous pouvez faire:if (Request.UrlReferrer != null) ViewState["PreviousPageUrl"] = Request.UrlReferrer.ToString();
Response.Redirect(ViewState["PreviousPageUrl"] != null ? ViewState["PreviousPageUrl"].ToString() : "SomeOtherPage.aspx");
Utilisez la Request.UrlReferrerpropriété.
Sous les scènes, il ne fait que vérifier la ServerVariables("HTTP_REFERER")propriété.
UrlReferrerfait beaucoup plus qu'un simple appel àServerVariables("HTTP_REFERER")
ServerVariables["HTTP_REFERER"]renvoie une chaîne , alors que Request.UrlReferrerrenvoie un Uri .
Request.Headers["Referer"]
Request.UrlRefererpropriété lancera un System.UriFormatExceptionsi 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 Request.ServerVariables, par MSDN:
Request.ServerVariables, collection
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.
Request.Headers, propriété
Obtient une collection d'en-têtes HTTP.
Request.Headersest un meilleur choix que Request.ServerVariables, puisque Request.ServerVariablescontient toutes les variables d'environnement ainsi que les en-têtes, où Request.Headersest une liste beaucoup plus courte qui ne contient que les en-têtes.
La meilleure solution est donc d'utiliser la Request.Headerscollection pour lire directement la valeur. Tenez cependant compte des avertissements de Microsoft concernant l'encodage HTML de la valeur si vous prévoyez de l'afficher sur un formulaire, cependant.
Referertête est orthographié différemment de la HTTP_REFERRERvariable serveur.
Comme ceci: Propriété HttpRequest.UrlReferrer
Uri myReferrer = Request.UrlReferrer;
string actual = myReferrer.ToString();
J'utilise .Net Core 2 mvc, celui-ci fonctionne pour moi (pour obtenir la page des aperçus):
HttpContext.Request.Headers["Referer"];
Puisque Google vous amène à cet article lors de la recherche, C# Web API Referrervoici l'offre: Web APIutilise un type différent Requestde l' MVC Requestappel normal HttpRequestMessagequi n'inclut pas UrlReferrer. Puisqu'une Web APIdemande normale n'inclut pas ces informations, si vous en avez vraiment besoin, vous devez obliger vos clients à faire tout leur possible pour les inclure. Bien que vous puissiez en faire partie API Object, une meilleure façon est de l'utiliser Headers.
Tout d'abord, vous pouvez étendre HttpRequestMessagepour fournir une 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 Headersur leur API Request:
// Microsoft.AspNet.WebApi.Client
client.DefaultRequestHeaders.Referrer = new Uri(url);
Et maintenant, le Web API Requestcomprend les données de référence auxquelles vous pouvez accéder comme ceci à partir de votre Web API:
Request.UrlReferrer();
string referrer = HttpContext.Current.Request.UrlReferrer.ToString();