Bagaimana cara mendapatkan URL perujuk dalam tindakan ASP.NET MVC?

89

Bagaimana cara mendapatkan URL perujuk dalam tindakan ASP.NET MVC? Saya mencoba untuk mengarahkan kembali ke halaman sebelum Anda melakukan tindakan.

Ryall
sumber
5
Perlu diingat bahwa tidak semua agen pengguna (browser AKA) akan mengirimkan informasi perujuk, dan beberapa bahkan mungkin memalsukannya.
belugabob

Jawaban:

148

Anda juga dapat menggunakan Request.UrlReferreruntuk mendapatkan URL pengarah jika Anda tidak suka mengakses Request.ServerVariableskamus secara langsung.

Derek Lawless
sumber
Itulah yang saya butuhkan. Terima kasih bro!
DmitryBoyko
Request.UrlReferrersebenarnya adalah URI tetapi dari sana Anda bisa mendapatkan semua yang Anda butuhkan terkait URL perujuk. (Selengkapnya tentang URI vs URL: stackoverflow.com/questions/176264/… ).
Miguel
20
Request.ServerVariables["http_referer"]

Harus dilakukan.

Daniel Elliott
sumber
9

Anda bisa menggunakan ini

filterContext.RequestContext.HttpContext.Request.UrlReferrer.AbsolutePath
Navish Rampal
sumber
2
Ini akan bekerja dalam konteks filter, tetapi tidak dalam konteks tindakan seperti pertanyaan yang ditanyakan.
Jace Rhea
3

Anda dapat mengirimkan url pengarah ke viewModel, menurut saya lebih baik pendekatannya daripada berbagi melalui negara, coba saja:

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
sumber
1
ya, tidak pernah menyadari garis bawah dengan sendirinya adalah nama variabel yang valid. Bagaimana kalau itu.
BVernon
@BVernon Pertanyaan sebenarnya adalah mengapa ada orang yang menggunakannya seperti itu. Satu-satunya konvensi yang saya ketahui dengan satu garis bawah untuk sebuah nama adalah untuk menandakan bahwa itu hanya placeholder untuk variabel yang tidak Anda inginkan atau butuhkan.
Daniel
@ Daniel Saya setuju, diperbaiki
Andrey Burykin