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.UrlReferrerdopo un postback lato server. Ovviamente Request.UrlReferrerora 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à.
UrlReferrerfa molto di più di una semplice chiamata aServerVariables("HTTP_REFERER")
ServerVariables["HTTP_REFERER"]restituisce una stringa , mentre Request.UrlReferrerrestituisce un Uri .
Request.Headers["Referer"]
Request.UrlRefererproprietà 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.ServerVariablescontiene 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.Headersraccolta per leggere direttamente il valore. Tuttavia, fai attenzione agli avvertimenti di Microsoft sulla codifica HTML del valore se intendi visualizzarlo in un modulo.
Refererintestazione è scritta in modo diverso dalla HTTP_REFERRERvariabile 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 Referrerecco l'affare: Web APIutilizza un tipo diverso Requestdal normale MVC Requestchiamato HttpRequestMessageche non include UrlReferrer. Poiché una Web APIrichiesta 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 HttpRequestMessageper 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 Headerloro API Request:
// Microsoft.AspNet.WebApi.Client
client.DefaultRequestHeaders.Referrer = new Uri(url);
E ora Web API Requestinclude i dati del referrer a cui puoi accedere in questo modo dal tuo Web API:
Request.UrlReferrer();
string referrer = HttpContext.Current.Request.UrlReferrer.ToString();