Получение HTTP-ссылки в ASP.NET

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

    8 Solutions collect form web for “Получение HTTP-ссылки в ASP.NET”

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

    Request.UrlReferrer 

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

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

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

    Пример : свойство HttpRequest.UrlReferrer

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

    объяснение

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

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

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

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

    Свойство Request.Headers

    Получает коллекцию заголовков 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(); 

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

    Давайте будем гением компьютера.