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.