Як отримати URL-адресу переходу в дії ASP.NET MVC?


88

Як отримати URL-адресу переходу в дії ASP.NET MVC? Я намагаюся перенаправити назад на сторінку, перш ніж ви викликали дію.


5
Майте на увазі, що не всі користувацькі агенти (веб-переглядачі AKA) надсилатимуть інформацію про реферала, а деякі можуть навіть підробляти.
belugabob

Відповіді:


148

Ви також можете Request.UrlReferrerотримати посилальну URL-адресу, якщо вам не подобається Request.ServerVariablesбезпосередній доступ до словника.


Це саме те, що мені потрібно. Дякую, брате!
DmitryBoyko

Request.UrlReferrerнасправді є URI, але звідти ви можете отримати все необхідне щодо URL-адреси переходу. (Докладніше про URI проти URL: stackoverflow.com/questions/176264/… ).
Мігель


8

Ви можете використовувати це

filterContext.RequestContext.HttpContext.Request.UrlReferrer.AbsolutePath

2
Це могло б працювати в контексті фільтра, але не в контексті дії, як задано питання.
Jace Rhea

3

Ви можете передати URL-адресу реферала для viewModel, на мій погляд, це кращий підхід, ніж обмін через стан, спробуйте так:

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
ха, ніколи не було зрозуміло, що підкреслення саме по собі є дійсним ім'ям змінної. Як щодо цього.
BVernon,

@BVernon Справжнє питання полягає в тому, чому хтось би використовував це саме так. Єдиний дозвіл, який мені відомий з одним підкресленням імені, - це означати, що це просто заповнювач для змінної, яку ви не хочете і не потребуєте.
Даніель

@Daniel Згоден, виправлено
Андрій Бурікін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.