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"]
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)