Получение HTTP Referrer в ASP.NET - PullRequest
95 голосов
/ 23 ноября 2010

Я ищу быстрый, простой и надежный способ получить браузер HTTP Referrer в ASP.Net ( C # ).Я знаю, что сам HTTP Referrer ненадежен, но я хочу надежный способ получить его, если он присутствует.

Ответы [ 9 ]

159 голосов
/ 23 ноября 2010

Вы можете использовать свойство UrlReferrer текущего запроса:

Request.UrlReferrer

Это будет читать HTTP-заголовок Referer из запроса, который может или не может бытьпредоставляется клиентом (пользовательским агентом).

19 голосов
/ 23 ноября 2010

Используйте свойство Request.UrlReferrer.

Под сценами просто проверяется свойство ServerVariables("HTTP_REFERER").

16 голосов
/ 06 сентября 2014
Request.Headers["Referer"]

Объяснение

Request.UrlReferer выдает System.UriFormatException, если HTTP-заголовок реферера неверен (что может произойти, поскольку он обычно не находится под вашим контролем).

Что касается использования Request.ServerVariables, для MSDN:

Request.ServerVariables Collection

Коллекция ServerVariables извлекает значения предопределенных переменных среды и информацию заголовка запроса.

Request.Headers Свойство

Получает коллекцию заголовков HTTP.

Request.Headers - лучший выбор, чем Request.ServerVariables, поскольку Request.ServerVariables содержит все переменные окружения, а также заголовки, где Request.Headers - гораздо более короткий список, содержащий только заголовки.

Таким образом, лучшее решение - использовать коллекцию Request.Headers для непосредственного чтения значения. Обратите внимание на предупреждения Microsoft о HTML-кодировке значения, если вы собираетесь отображать его в форме.

12 голосов
/ 23 ноября 2010

Как это: Свойство HttpRequest.UrlReferrer

Uri myReferrer = Request.UrlReferrer;
string actual = myReferrer.ToString();
9 голосов
/ 08 сентября 2015

Так как Google приводит вас к этому сообщению при поиске C# Web API Referrer, вот предложение: Web API использует другой тип Request от обычного MVC Request, называемый HttpRequestMessage, который не включает UrlReferrer.Поскольку обычный запрос Web API не включает эту информацию, если вам она действительно нужна, ваши клиенты должны приложить все усилия, чтобы включить ее.Хотя вы можете сделать это частью вашего API Object, лучше использовать Headers.

Сначала вы можете расширить HttpRequestMessage, чтобы обеспечить метод UrlReferrer():

public static string UrlReferrer(this HttpRequestMessage request)
{
    return request.Headers.Referrer == null ? "unknown" : request.Headers.Referrer.AbsoluteUri;
}

Тогда ваши клиенты должны установить Referrer Header на свои API Request:

// Microsoft.AspNet.WebApi.Client
client.DefaultRequestHeaders.Referrer = new Uri(url);

И теперь Web API Request включает в себя данные рефералов, к которым вы можете получить доступ таким образом с вашего Web API:

Request.UrlReferrer();
7 голосов
/ 22 ноября 2017

Я использую .Net Core 2 mvc, этот работает для меня (чтобы получить страницу предварительного просмотра):

HttpContext.Request.Headers["Referer"];
1 голос
/ 06 декабря 2017

Иногда вы должны дать всю ссылку, подобную этой

System.Web.HttpContext.Current.Request.UrlReferrer.ToString();

(в опции, когда «Текущий» не найден)

1 голос
/ 04 ноября 2016
string referrer = HttpContext.Current.Request.UrlReferrer.ToString();
0 голосов
/ 05 марта 2019

Принадлежа к другому ответу, я добавил условие условия для получения нуля.

string ComingUrl = "";
if (Request.UrlReferrer != null)
{
    ComingUrl = System.Web.HttpContext.Current.Request.UrlReferrer.ToString();
}
else
{
    ComingUrl = "Direct"; // Your code
}
...