Получение 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"];
когда-нибудь вы должны дать все ссылки, как это
System.Web.HttpContext.Current.Request.UrlReferrer.ToString();
(в опции, когда "текущий" не основан)