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.


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.


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


8

Vous pouvez utiliser ceci

filterContext.RequestContext.HttpContext.Request.UrlReferrer.AbsolutePath

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()

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.