Como obtenho o URL referenciador em uma ação ASP.NET MVC?

88

Como obtenho o URL referenciador em uma ação ASP.NET MVC? Estou tentando redirecionar de volta para a página antes de você chamar uma ação.

Ryall
fonte
5
Lembre-se de que nem todos os agentes de usuário (também conhecidos como navegadores) enviarão as informações de referência e alguns podem até mesmo falsificá-las.
belugabob

Respostas:

148

Você também pode usar Request.UrlReferrerpara obter o URL de referência se não gostar de acessar o Request.ServerVariablesdicionário diretamente.

Derek Lawless
fonte
É exatamente o que preciso. Obrigada mano!
DmitryBoyko
Request.UrlReferreré na verdade o URI, mas a partir dele você pode obter tudo o que precisa sobre o URL referenciador. (Mais sobre URI vs URL: stackoverflow.com/questions/176264/… ).
Miguel
20
Request.ServerVariables["http_referer"]

Deveria fazer.

Daniel Elliott
fonte
8

Você pode usar isso

filterContext.RequestContext.HttpContext.Request.UrlReferrer.AbsolutePath
Navish Rampal
fonte
2
Isso funcionaria em um contexto de filtro, mas não no contexto de ação como a pergunta feita.
Jace Rhea
3

Você pode passar a url do referenciador para viewModel, na minha opinião é melhor abordagem do que compartilhar via estado, tente assim:

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
fonte
1
huh, nunca percebi o sublinhado por si só é um nome de variável válido. Que tal isso.
BVernon
@BVernon A verdadeira questão é por que alguém o usaria dessa forma. A única convenção que conheço com um único sublinhado para um nome significa que ele é apenas um espaço reservado para uma variável que você não deseja ou precisa.
Daniel
@Daniel Eu concordo, consertado
Andrey Burykin