Come ottengo l'URL del referrer in un'azione ASP.NET MVC?


89

Come ottengo l'URL del referrer in un'azione ASP.NET MVC? Sto cercando di reindirizzare di nuovo alla pagina prima che tu richiamassi un'azione.


5
Tieni presente che non tutti gli user-agent (browser AKA) invieranno le informazioni sul referrer e alcuni potrebbero persino fingere.
belugabob

Risposte:


148

Puoi utilizzare anche Request.UrlReferrerper ottenere l'URL di riferimento se non ti piace accedere Request.ServerVariablesdirettamente al dizionario.


È esattamente ciò di cui ho bisogno. Grazie Fratello!
DmitryBoyko,

Request.UrlReferrerè in realtà l'URI, ma da lì puoi ottenere tutto ciò di cui hai bisogno per quanto riguarda l'URL del referrer. (Ulteriori informazioni su URI e URL: stackoverflow.com/questions/176264/… ).
Miguel


9

Puoi usarlo

filterContext.RequestContext.HttpContext.Request.UrlReferrer.AbsolutePath

2
Ciò funzionerebbe in un contesto di filtro, ma non nel contesto dell'azione come richiesto dalla domanda.
Jace Rhea

3

Puoi passare l'URL del referrer a viewModel, secondo me è meglio avvicinarsi alla condivisione tramite lo stato, prova così:

public interface IReferrer
{
    String Referrer { get; set; }
}

...

public static MvcHtmlString HiddenForReferrer<TModel>(this HtmlHelper<TModel> htmlHelper) where TModel : IReferrer
{
    var str = htmlHelper.HiddenFor(hh => hh.Referrer);
    var referrer = HttpContext.Current.Request.UrlReferrer.AbsoluteUri;
    return new MvcHtmlString(str.ToHtmlString().Replace("value=\"\"", String.Format("value=\"{0}\"", referrer)));
}

...

@Html.HiddenForReferrer()

1
eh, mai capito che il carattere di sottolineatura da solo è un nome di variabile valido. Che ne dici?
BVernon

@BVernon La vera domanda è perché qualcuno dovrebbe usarlo in questo modo. L'unica convenzione di cui sono a conoscenza con un singolo carattere di sottolineatura per un nome è di indicare che è solo un segnaposto per una variabile che non desideri o non ti serve.
Daniel

@Daniel Sono d'accordo, risolto
Andrey Burykin
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.