Получение http-реферера в ASP.NET

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

8 ответов


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

Request.UrlReferrer

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


использовать Request.UrlReferrer собственность.

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


такой: HttpRequest.UrlReferrer Собственность

Uri myReferrer = Request.UrlReferrer;
string actual = myReferrer.ToString();

Request.Headers["Referer"]

объяснение

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

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

запрос.Коллекции ServerVariables

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

запрос.Свойство Заголовков

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

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

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


так как 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();

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

HttpContext.Request.Headers["Referer"];

string referrer = HttpContext.Current.Request.UrlReferrer.ToString();

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

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

(в опции, когда "текущий" не основан)