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

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

Ответ 1

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

Request.UrlReferrer

Это будет читать HTTP-заголовок

Ответ 2

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

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

Ответ 3

Request.Headers["Referer"]

Объяснение

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 значения, если вы собираетесь отображать его в форме.

Ответ 5

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

Ответ 6

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

Ответ 7

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

HttpContext.Request.Headers["Referer"];

Ответ 8

Когда-нибудь вы должны указать всю ссылку, подобную этой

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

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