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


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

8 88

8 ответов:

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

Request.UrlReferrer

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

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

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

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

Uri myReferrer = Request.UrlReferrer;
string actual = myReferrer.ToString();
Request.Headers["Referer"]

объяснение

The 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();

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