Obtendo o referenciador HTTP no ASP.NET

Estou procurando uma maneira rápida, fácil e confiável de obter o referenciador HTTP do navegador no ASP.Net ( C # ). Eu sei que o referenciador HTTP em si não é confiável, mas eu quero uma maneira confiável de obter o referenciador se ele estiver presente.

Você pode usar a propriedade UrlReferrer da solicitação atual:

Request.UrlReferrer 

Isso lerá o header HTTP Referer da solicitação que pode ou não ser fornecida pelo cliente (agente do usuário).

Use a propriedade Request.UrlReferrer .

Abaixo das cenas está apenas verificando a propriedade ServerVariables("HTTP_REFERER") .

Assim: Propriedade HttpRequest.UrlReferrer

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

Explicação

O Request.UrlReferer lançará um System.UriFormatException se o header HTTP do referer for malformado (o que pode acontecer, pois geralmente não está sob seu controle).

Quanto ao uso de Request.ServerVariables , por MSDN:

Coleção Request.ServerVariables

A coleção ServerVariables recupera os valores de variables ​​de ambiente predeterminadas e solicita informações de header.

Propriedade Request.Headers

Obtém uma coleção de headers HTTP.

Request.Headers é uma escolha melhor que Request.ServerVariables , já que Request.ServerVariables contém todas as variables ​​de ambiente, bem como os headers, em que Request.Headers é uma lista muito mais curta que contém apenas os headers.

Portanto, a melhor solução é usar a coleção Request.Headers para ler o valor diretamente. Preste atenção aos avisos da Microsoft sobre a codificação HTML do valor, se você for exibi-lo em um formulário.

Como o Google leva você a esta postagem ao pesquisar por C# Web API Referrer aqui está a transação: Web API usa um tipo diferente de Request da Request MVC Request normal chamada HttpRequestMessage que não inclui o UrlReferrer . Como uma solicitação normal de Web API não inclui essas informações, se você realmente precisar delas, é necessário que seus clientes saiam de seu caminho para incluí-las. Embora você possa fazer isso ser parte do seu API Object , a melhor maneira é usar Headers .

Primeiro, você pode estender o HttpRequestMessage para fornecer um método UrlReferrer() :

 public static string UrlReferrer(this HttpRequestMessage request) { return request.Headers.Referrer == null ? "unknown" : request.Headers.Referrer.AbsoluteUri; } 

Em seguida, seus clientes precisam definir o Referrer Header do Referrer Header como sua API Request :

 // Microsoft.AspNet.WebApi.Client client.DefaultRequestHeaders.Referrer = new Uri(url); 

E agora a Web API Request da Web API Request inclui os dados do referenciador que você pode acessar dessa maneira a partir da sua Web API :

 Request.UrlReferrer(); 

Estou usando o .Net Core 2 mvc, esse trabalho para mim (para obter a página de previews):

 HttpContext.Request.Headers["Referer"]; 
 string referrer = HttpContext.Current.Request.UrlReferrer.ToString(); 

Às vezes você deve dar todo o link como este

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

(na opção quando “atual” não fundado)