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.

Foi útil?

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
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top