Sto cercando un modo rapido, semplice e affidabile per ottenere il referrer HTTP del browser in ASP.Net ( C # ). So che il referrer HTTP stesso è inaffidabile, ma desidero un modo affidabile per ottenere il referrer se è presente.
Sto cercando un modo rapido, semplice e affidabile per ottenere il referrer HTTP del browser in ASP.Net ( C # ). So che il referrer HTTP stesso è inaffidabile, ma desidero un modo affidabile per ottenere il referrer se è presente.
Risposte:
È possibile utilizzare la proprietà UrlReferrer della richiesta corrente:
Request.UrlReferrer
Questo leggerà l' intestazione HTTP del referer dalla richiesta che può o non può essere fornita dal client (agente utente).
Request.UrlReferrer
dopo un postback lato server. Ovviamente Request.UrlReferrer
ora avrà il valore della pagina in cui stai postando. Nella maggior parte dei casi, le persone hanno bisogno della pagina precedente. In questo caso, assicurati di memorizzare la pagina precedente in una variabile di viewstate quando la pagina viene caricata per la prima volta. E poi quando accedi a questa variabile ha la pagina precedente da cui sei venuto. Ad esempio, nell'evento di caricamento della pagina dei moduli asp.net puoi eseguire:if (Request.UrlReferrer != null) ViewState["PreviousPageUrl"] = Request.UrlReferrer.ToString();
Response.Redirect(ViewState["PreviousPageUrl"] != null ? ViewState["PreviousPageUrl"].ToString() : "SomeOtherPage.aspx");
Utilizzare il Request.UrlReferrer
proprietà.
Sotto le scene sta solo controllando la ServerVariables("HTTP_REFERER")
proprietà.
UrlReferrer
fa molto di più di una semplice chiamata aServerVariables("HTTP_REFERER")
ServerVariables["HTTP_REFERER"]
restituisce una stringa , mentre Request.UrlReferrer
restituisce un Uri .
Request.Headers["Referer"]
Request.UrlReferer
proprietà lancerà un fileSystem.UriFormatException
se l'intestazione HTTP del referer non è formattata correttamente (cosa che può accadere poiché di solito non è sotto il tuo controllo).Per quanto riguarda l'utilizzo Request.ServerVariables
, per MSDN:
Raccolta Request.ServerVariables
La raccolta ServerVariables recupera i valori delle variabili di ambiente predeterminate e le informazioni di intestazione della richiesta.
Proprietà Request.Headers
Ottiene una raccolta di intestazioni HTTP.
Request.Headers
è una scelta migliore rispetto a Request.ServerVariables
, poiché Request.ServerVariables
contiene tutte le variabili di ambiente nonché le intestazioni, doveRequest.Headers
c'è un elenco molto più breve che contiene solo le intestazioni.
Quindi la soluzione migliore è utilizzare la Request.Headers
raccolta per leggere direttamente il valore. Tuttavia, fai attenzione agli avvertimenti di Microsoft sulla codifica HTML del valore se intendi visualizzarlo in un modulo.
Referer
intestazione è scritta in modo diverso dalla HTTP_REFERRER
variabile del server.
In questo modo: proprietà HttpRequest.UrlReferrer
Uri myReferrer = Request.UrlReferrer;
string actual = myReferrer.ToString();
Sto usando .Net Core 2 mvc, questo funziona per me (per ottenere la pagina delle anteprime):
HttpContext.Request.Headers["Referer"];
Dato che Google ti porta a questo post durante la ricerca, C# Web API Referrer
ecco l'affare: Web API
utilizza un tipo diverso Request
dal normale MVC Request
chiamato HttpRequestMessage
che non include UrlReferrer
. Poiché una Web API
richiesta normale non include queste informazioni, se ne hai davvero bisogno, devi chiedere ai tuoi clienti di fare di tutto per includerle. Sebbene tu possa fare in modo che questo diventi parte del tuo API Object
, un modo migliore è usareHeaders
.
Innanzitutto, puoi estendere HttpRequestMessage
per fornire un UrlReferrer()
metodo:
public static string UrlReferrer(this HttpRequestMessage request)
{
return request.Headers.Referrer == null ? "unknown" : request.Headers.Referrer.AbsoluteUri;
}
Quindi i tuoi clienti devono impostare il Referrer Header
loro API Request
:
// Microsoft.AspNet.WebApi.Client
client.DefaultRequestHeaders.Referrer = new Uri(url);
E ora Web API Request
include i dati del referrer a cui puoi accedere in questo modo dal tuo Web API
:
Request.UrlReferrer();
string referrer = HttpContext.Current.Request.UrlReferrer.ToString();