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.


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.


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


9

Anda bisa menggunakan ini

filterContext.RequestContext.HttpContext.Request.UrlReferrer.AbsolutePath

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.