Chegando a HTTP Referrer em ASP.NET
-
27-09-2019 - |
Pergunta
Eu estou olhando para uma rápida, fácil e segura maneira de conseguir que o navegador HTTP Referrer no ASP.Net (C#).Eu sei que o Indicador HTTP si não é confiável, mas eu quero uma maneira confiável de obter a referência se é presentes.
Solução
Você poderia usar o UrlReferrer propriedade da solicitação atual:
Request.UrlReferrer
Isso vai ler o Referente Cabeçalho HTTP da solicitação que pode ou não ser fornecida pelo cliente (agente do usuário).
Outras dicas
Use o Request.UrlReferrer
propriedade.
Embaixo das cenas, está apenas verificando o ServerVariables("HTTP_REFERER")
propriedade.
Request.Headers["Referer"]
Explicação
O Request.UrlReferer
vai jogar um System.UriFormatException
se o referer do cabeçalho HTTP é mal formada (o que pode acontecer, pois normalmente não é sob o seu controlo).
Como utilizar Request.ServerVariables
, por MSDN:
Pedido.Coleção ServerVariables
A coleção ServerVariables recupera os valores de pré-variáveis de ambiente e de pedido de informações de cabeçalho.
Pedido.Cabeçalhos Propriedade
Fica uma coleção de cabeçalhos HTTP.
Request.Headers
é uma escolha melhor do que Request.ServerVariables
, já que Request.ServerVariables
contém todas as variáveis de ambiente, bem como os cabeçalhos, onde Request.Headers
é uma lista muito mais curta que contém apenas os cabeçalhos.
Portanto, a melhor solução é usar o Request.Headers
coleção para ler o valor diretamente.Fazer ouvidos da Microsoft avisos sobre HTML codificação de valor, se você estiver indo para exibi-lo em um formulário, no entanto.
Assim: Propriedade httprequest.urlReferrer
Uri myReferrer = Request.UrlReferrer;
string actual = myReferrer.ToString();
Desde que o Google o leva a este post ao pesquisar C# Web API Referrer
aqui está o acordo: Web API
usa um tipo diferente de Request
do normal MVC Request
chamado HttpRequestMessage
que não inclui UrlReferrer
. Desde um normal Web API
A solicitação não inclui essas informações; se você realmente precisar, você deve fazer com que seus clientes se esforcem para incluí -las. Embora você possa fazer isso fazer parte do seu API Object
, uma maneira melhor é usar Headers
.
Primeiro, você pode estender HttpRequestMessage
para fornecer a UrlReferrer()
método:
public static string UrlReferrer(this HttpRequestMessage request)
{
return request.Headers.Referrer == null ? "unknown" : request.Headers.Referrer.AbsoluteUri;
}
Então seus clientes precisam definir o Referrer Header
para o deles API Request
:
// Microsoft.AspNet.WebApi.Client
client.DefaultRequestHeaders.Referrer = new Uri(url);
E agora o Web API Request
inclui os dados do referenciador que você pode acessar como este a partir do seu Web API
:
Request.UrlReferrer();
Estou usando o .NET Core 2 MVC, este trabalho para mim (para obter a página de visualizações):
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)
Pertencente a outra resposta, adicionei cláusula de condição para ficar nulo.
string ComingUrl = "";
if (Request.UrlReferrer != null)
{
ComingUrl = System.Web.HttpContext.Current.Request.UrlReferrer.ToString();
}
else
{
ComingUrl = "Direct"; // Your code
}