Je sais que cette réponse est d'environ 2 ans et demi de retard, mais je n'ai pas pu trouver une description complète sur la propriété UrlReferrer
donc je me suis dit que j'ajouterais cette information ici. @ Réponse MarcGravell est correcte pour la plupart, mais il manque une autre possibilité. La valeur de referrer spécifiée dans l'en-tête HTTP peut également être un uri non valide.
Pour cette raison, vous devez faire attention lors de l'utilisation de la propriété UrlReferrer
sur HttpRequest
. Si vous regardez le code qui est exécuté lorsque UrlReferrer
est appelée en utilisant quelque chose comme ILSpy, vous verrez qu'il essaie d'analyser la valeur de l'en-tête de la demande. Si la valeur dans cet en-tête n'est pas un uri valide, vous obtiendrez un System.UriFormatException
. Cela signifie que la simple vérification de UrlReferrer
pour null avant d'essayer d'accéder à AbsoluteUri
pourrait vous laisser des exceptions non gérées si le referrer n'est pas un uri valide. Si vous voulez un Uri
valide ou null
, vous devrez utiliser Request.ServerVariables["HTTP_REFERER"]
puis Uri.TryParse
, ou vous devrez envelopper le Request.UriReferrer == null
dans un try-catch
.
J'ai mis en place une démo rapide pour montrer le comportement de la propriété UrlReferrer
. Prenez la page suivante comme exemple:
<%@ Page Language="C#" AutoEventWireup="true" %>
<html><body>
<table border="1">
<tr><td>Referrer</td><td><%= GetUrlReferrer() %></td></tr>
</table>
</body></html>
<script runat="server">
public string GetUrlReferrer()
{
try
{
return Request.UrlReferrer == null ? "(None)" : Request.UrlReferrer.ToString();
}
catch (Exception ex)
{
return Request.ServerVariables["HTTP_REFERER"] + " (from Server Variable)";
}
}
</script>
Mettre en place cette page pour fonctionner sous http://localhost/urlreferrertest.aspx
, et puis essayer de l'appeler de Powershell avec un Uri invalide pour le referrer:
> $client = new-object System.Net.WebClient
> $client.Headers.Add("Referer", "http://www%2etest%2e.com/test.html")
> $client.DownloadString("http://localhost/urlreferrertest.aspx")
Si vous franchissez le code que vous verrez que l'appel à Request.UrlReferrer
lève une exception, et que http://www%2etest%2e.com/test.html
est renvoyé en accédant au ServerVariable
.
Je suppose que vous pourriez utiliser 'Request.UrlReferrer' pour cela. – yogi
Il n'y a aucune raison de rejeter une question légitime. Cela peut sembler idiot de ce qui se fait ici, mais cela ne rend pas la question moins valable. – cjbarth