¿Cómo obtengo la URL de referencia en una acción ASP.NET MVC?

88

¿Cómo obtengo la URL de referencia en una acción ASP.NET MVC? Estoy tratando de redirigir a la página antes de que llamaras a una acción.

Ryall
fuente
5
Tenga en cuenta que no todos los agentes de usuario (también conocidos como navegadores) enviarán la información de referencia, y algunos incluso pueden falsificarla.
belugabob

Respuestas:

148

También puede utilizar Request.UrlReferrerpara obtener la URL de referencia si no le gusta acceder al Request.ServerVariablesdiccionario directamente.

Derek Lawless
fuente
Es exactamente lo que necesito. ¡Gracias hermano!
DmitryBoyko
Request.UrlReferreres en realidad el URI, pero desde allí puede obtener todo lo que necesita con respecto a la URL de referencia. (Más sobre URI vs URL: stackoverflow.com/questions/176264/… ).
Miguel
20
Request.ServerVariables["http_referer"]

Debería hacer.

Daniel Elliott
fuente
8

Puedes usar esto

filterContext.RequestContext.HttpContext.Request.UrlReferrer.AbsolutePath
Navish Rampal
fuente
2
Esto funcionaría en un contexto de filtro, pero no en el contexto de acción como se solicita en la pregunta.
Jace Rhea
3

Puede pasar la URL de referencia a viewModel, en mi opinión, es mejor enfoque que compartir a través del estado, intente así:

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
fuente
1
eh, nunca me di cuenta de que el subrayado por sí solo es un nombre de variable válido. ¿Qué tal eso?
BVernon
@BVernon La verdadera pregunta es por qué alguien lo usaría de esa manera. La única convención que conozco con un solo guión bajo para un nombre es para significar que es solo un marcador de posición para una variable que no desea o necesita.
Daniel
@Daniel Estoy de acuerdo, arreglado
Andrey Burykin