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


88

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


5
Имейте в виду, что не все пользовательские агенты (также известные как браузеры) будут отправлять информацию о реферере, а некоторые могут даже подделать ее.
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
Это будет работать в контексте фильтра, но не в контексте действия, как заданный вопрос.
Джейс Реа

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.