Как получить URL-адрес реферера в действии ASP.NET MVC?

88

Как получить URL-адрес реферера в действии ASP.NET MVC? Я пытаюсь вернуться на страницу до того, как вы вызвали действие.

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

Ответы:

148

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

Дерек Лоулесс
источник
Это именно то, что мне нужно. Спасибо, брат!
DmitryBoyko
Request.UrlReferrerна самом деле является URI, но оттуда вы можете получить все, что вам нужно, относительно URL-адреса реферера. (Подробнее о URI и URL: stackoverflow.com/questions/176264/… ).
Мигель
20
Request.ServerVariables["http_referer"]

Следует сделать.

Дэниел Эллиотт
источник
8

Вы можете использовать это

filterContext.RequestContext.HttpContext.Request.UrlReferrer.AbsolutePath
Навиш Рампал
источник
2
Это будет работать в контексте фильтра, но не в контексте действия, как заданный вопрос.
Джейс Реа
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 Согласен, исправлено
Андрей Бурыкин