Jak uzyskać adres URL strony odsyłającej w akcji ASP.NET MVC?

88

Jak uzyskać adres URL strony odsyłającej w akcji ASP.NET MVC? Próbuję przekierować z powrotem na stronę, zanim wywołałeś akcję.

Ryall
źródło
5
Pamiętaj, że nie wszystkie programy użytkownika (przeglądarki AKA) wysyłają informacje o stronie odsyłającej, a niektóre mogą nawet je sfałszować.
belugabob

Odpowiedzi:

148

Możesz również użyć, Request.UrlReferreraby uzyskać odsyłający adres URL, jeśli nie lubisz Request.ServerVariablesbezpośredniego dostępu do słownika.

Derek Lawless
źródło
To jest dokładnie to, czego potrzebuję. Dzięki, stary!
DmitryBoyko
Request.UrlReferrerjest w rzeczywistości identyfikatorem URI, ale stamtąd możesz uzyskać wszystko, czego potrzebujesz, jeśli chodzi o adres URL strony odsyłającej. (Więcej informacji o URI i URL: stackoverflow.com/questions/176264/ ... ).
Miguel
20
Request.ServerVariables["http_referer"]

Powinieneś zrobić.

Daniel Elliott
źródło
8

Możesz tego użyć

filterContext.RequestContext.HttpContext.Request.UrlReferrer.AbsolutePath
Navish Rampal
źródło
2
To zadziałałoby w kontekście filtru, ale nie w kontekście akcji, jak postawione pytanie.
Jace Rhea
3

Możesz przekazać adres odsyłający do viewModel, moim zdaniem jest to lepsze podejście niż udostępnianie przez stan, spróbuj:

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
źródło
1
huh, nigdy nie zrealizowane podkreślenie samo w sobie jest poprawną nazwą zmiennej. Co powiesz na to.
BVernon
@BVernon Prawdziwe pytanie brzmi, dlaczego ktokolwiek miałby używać tego w ten sposób. Jedyną konwencją, jaką znam z pojedynczym podkreśleniem dla nazwy, jest wskazanie, że jest to tylko symbol zastępczy zmiennej, której nie chcesz lub nie potrzebujesz.
Daniel
@Daniel Zgadzam się, naprawiono
Andrey Burykin