Comment obtenir l'URL de référence dans une action ASP.NET MVC?

88

Comment obtenir l'URL de référence dans une action ASP.NET MVC? J'essaie de rediriger vers la page avant que vous n'appeliez une action.

Ryall
la source
5
Gardez à l'esprit que tous les agents utilisateurs (navigateurs AKA) n'enverront pas les informations de référence, et certains peuvent même les simuler.
belugabob

Réponses:

148

Vous pouvez également utiliser Request.UrlReferrerpour obtenir l'URL de référence si vous n'aimez pas accéder Request.ServerVariablesdirectement au dictionnaire.

Derek Lawless
la source
C'est exactement ce dont j'ai besoin. Merci mon ami!
DmitryBoyko
Request.UrlReferrerest en fait l'URI, mais à partir de là, vous pouvez obtenir tout ce dont vous avez besoin concernant l'URL de référence. (En savoir plus sur l'URI et l'URL: stackoverflow.com/questions/176264/… ).
Miguel
20
Request.ServerVariables["http_referer"]

Devrait faire.

Daniel Elliott
la source
8

Vous pouvez utiliser ceci

filterContext.RequestContext.HttpContext.Request.UrlReferrer.AbsolutePath
Navish Rampal
la source
2
Cela fonctionnerait dans un contexte de filtre, mais pas dans le contexte d'action comme la question demandée.
Jace Rhea
3

Vous pouvez passer l'URL de référence à viewModel, à mon avis, c'est une meilleure approche que de partager via l'état, essayez donc:

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
la source
1
hein, jamais réalisé que le soulignement en soi est un nom de variable valide. Et ça.
BVernon le
@BVernon La vraie question est de savoir pourquoi quelqu'un l'utiliserait de cette façon. La seule convention que je connaisse avec un seul trait de soulignement pour un nom est de signifier qu'il s'agit simplement d'un espace réservé pour une variable que vous ne voulez pas ou dont vous n'avez pas besoin.
Daniel
@Daniel Je suis d'accord, corrigé
Andrey Burykin