Wie erhalte ich die Referrer-URL in einer ASP.NET MVC-Aktion?

85

Wie erhalte ich die Referrer-URL in einer ASP.NET MVC-Aktion? Ich versuche, zur Seite zurückzukehren, bevor Sie eine Aktion aufgerufen haben.

Ryall
quelle
5
Beachten Sie, dass nicht alle Benutzeragenten (AKA-Browser) die Referrer-Informationen senden und einige sie möglicherweise sogar fälschen.
Belugabob

Antworten:

145

Sie können auch Request.UrlReferrerdie verweisende URL abrufen, wenn Sie nicht Request.ServerVariablesdirekt auf das Wörterbuch zugreifen möchten.

Derek Lawless
quelle
Es ist genau das, was ich brauche. Danke, Bro!
Entwickler
Request.UrlReferrerist eigentlich die URI, aber von dort können Sie alles bekommen, was Sie bezüglich der Referrer-URL benötigen. (Weitere Informationen zu URI und URL: stackoverflow.com/questions/176264/… ).
Miguel
20
Request.ServerVariables["http_referer"]

Sollte tun.

Daniel Elliott
quelle
8

Sie können dies verwenden

filterContext.RequestContext.HttpContext.Request.UrlReferrer.AbsolutePath
Navish Rampal
quelle
2
Dies würde in einem Filterkontext funktionieren, jedoch nicht im Aktionskontext, wie die gestellte Frage.
Jace Rhea
3

Sie können die Referrer-URL an viewModel übergeben. Meiner Meinung nach ist dies ein besserer Ansatz als das Teilen über den Status. Versuchen Sie Folgendes:

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()
Andrey Burykin
quelle
1
huh, nie realisiert Unterstrich für sich ist ein gültiger Variablenname. Wie wäre es damit?
BVernon
@BVernon Die eigentliche Frage ist, warum jemand es so verwenden würde. Die einzige Konvention, die mir mit einem einzelnen Unterstrich für einen Namen bekannt ist, besteht darin, anzuzeigen, dass es sich nur um einen Platzhalter für eine Variable handelt, die Sie nicht möchten oder benötigen.
Daniel
@ Daniel Ich stimme zu, behoben
Andrey Burykin