2012-08-09 2 views
3

Je suis en train d'utiliser le code ci-dessous pour obtenir l'URL de référence dans global.asax session_start:HttpContext.Current.Request.ServerVariables [ "HTTP_REFERER"] null

HttpContext.Current.Request.ServerVariables["HTTP_REFERER"] 

J'ai essayé d'utiliser Request.UrlReferrer.AbsoluteUri but UrlReferrer est également nulle.

mais je reçois null. Pouvez-vous s'il vous plaît me suggérer ce qui est faux ou alternative?

+1

Je suppose que vous pourriez utiliser 'Request.UrlReferrer' pour cela. – yogi

+0

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

Répondre

6

Tous les agents utilisateurs envoyer un referrer, certains mandataires/intermédiaires bande le referrer, et souvent il suffit est no referrer.

Vérifiez simplement si Request.UrlReferrer == null à un certain point; si c'est le cas, n'essayez pas de regarder Request.UrlReferrer.AbsoluteUri.

Il n'y a rien de "mal" ici, et rien que vous puissiez faire à ce sujet. Si vous ne savez pas d'où ils viennent, vous devrez simplement vivre avec ça.

2

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.

Questions connexes