2010-11-23 3 views
81

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

+2

возможный дубликат [Как получить URL ссылающейся в действие ASP.NET MVC?] (HTTP: // ул ackoverflow.com/questions/1471188/how-do-i-get-the-referrer-url-in-an-asp-net-mvc-action) – 2014-05-29 15:10:45

+0

Fro Asp.Net Core см. [Как получить URL-адрес URL-адреса в ASP .NET Core MVC?] (// stackoverflow.com/q/38772394) – 2017-09-21 09:05:51

ответ

144

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

Request.UrlReferrer 

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

+7

Следует отметить, что это свойство будет генерировать исключение System.UriFormatException, если заголовок HTTP-заголовка отклонен. – NightOwl888 2014-09-05 20:15:04

+1

@ Darin Dimitrov пытается создать REST API с помощью WEB API. UrlReferrer не является частью объекта Request. Должен ли я добавить «использование» и т. Д. Что мне не хватает? DLL? – Ravi 2014-11-04 00:21:59

+1

Следует отметить, что Разница является написанием правильной. Заголовок HTTP имеет орфографическую ошибку. MS использует правильное написание в имени свойства. К сожалению, эти два не совпадают, что может привести к путанице некоторых людей (меня) при тестировании. – John 2015-09-04 18:23:24

17

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

Под кадром просто проверяется имущество ServerVariables("HTTP_REFERER").

12
Request.Headers["Referer"] 

Объяснение

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

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

Request.ServerVariables Коллекция

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

Request.Headers недвижимости

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

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

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

8

Поскольку 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(); 
1
string referrer = HttpContext.Current.Request.UrlReferrer.ToString(); 
0

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

HttpContext.Request.Headers["Referer"]; 
0

Иногда вы должны дать все ссылки, как этот

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

(опция, когда "Current" не основан)

Смежные вопросы