web-dev-qa-db-fra.com

Obtenir le référent HTTP dans ASP.NET

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 .

97
Chuck Le Butt

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

161
Darin Dimitrov

Utilisez la propriété Request.UrlReferrer.

Sous les scènes, il ne fait que vérifier la propriété ServerVariables("HTTP_REFERER").

19
Dismissile
Request.Headers["Referer"]

Explication

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.

16
NightOwl888

Comme ceci: propriété HttpRequest.UrlReferrer

Uri myReferrer = Request.UrlReferrer;
string actual = myReferrer.ToString();
12
Tom

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();
9
Serj Sagan

J'utilise .Net Core 2 mvc, celui-ci fonctionne pour moi (pour obtenir la page des aperçus):

HttpContext.Request.Headers["Referer"];
8
Saad Hasan
string referrer = HttpContext.Current.Request.UrlReferrer.ToString();
1
Donat Sasin

Parfois, vous devez donner tout le lien comme celui-ci

System.Web.HttpContext.Current.Request.UrlReferrer.ToString();

(en option lorsque "en cours" non fondé)

1
Sportac

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
}
0
HQtunes.epizy