Estou procurando uma maneira rápida, fácil e confiável de obter o HTTP Referrer do navegador em ASP.Net ( C # ). Sei que o referenciador HTTP em si não é confiável, mas quero uma maneira confiável de obter o referenciador, se estiver presente.
Estou procurando uma maneira rápida, fácil e confiável de obter o HTTP Referrer do navegador em ASP.Net ( C # ). Sei que o referenciador HTTP em si não é confiável, mas quero uma maneira confiável de obter o referenciador, se estiver presente.
Respostas:
Você pode usar a propriedade UrlReferrer da solicitação atual:
Request.UrlReferrer
Isso lerá o cabeçalho Referer HTTP da solicitação, que pode ou não ser fornecida pelo cliente (agente do usuário).
Request.UrlReferrer
após um postback do lado do servidor. É claro Request.UrlReferrer
que agora terá o valor da página para a qual você está postando. Na maioria dos casos, as pessoas precisam da página anterior. Nesse caso, certifique-se de armazenar a página anterior em uma variável viewstate quando a página for carregada pela primeira vez. E então quando você acessa esta variável ela tem a página anterior de onde você veio. Por exemplo, no evento de carregamento de página de formulários asp.net, você pode fazer:if (Request.UrlReferrer != null) ViewState["PreviousPageUrl"] = Request.UrlReferrer.ToString();
Response.Redirect(ViewState["PreviousPageUrl"] != null ? ViewState["PreviousPageUrl"].ToString() : "SomeOtherPage.aspx");
Use a Request.UrlReferrer
propriedade.
Por baixo das cenas é só verificar a ServerVariables("HTTP_REFERER")
propriedade.
UrlReferrer
faz muito mais do que uma simples ligação paraServerVariables("HTTP_REFERER")
ServerVariables["HTTP_REFERER"]
retorna uma string , enquanto Request.UrlReferrer
retorna um Uri .
Request.Headers["Referer"]
Request.UrlReferer
propriedade lançará um System.UriFormatException
se o cabeçalho HTTP referenciador estiver malformado (o que pode acontecer, pois geralmente não está sob seu controle).Quanto ao uso Request.ServerVariables
, por MSDN:
Coleção Request.ServerVariables
A coleção ServerVariables recupera os valores de variáveis de ambiente predeterminadas e informações de cabeçalho de solicitação.
Propriedade Request.Headers
Obtém uma coleção de cabeçalhos HTTP.
Request.Headers
é uma escolha melhor do que Request.ServerVariables
, uma vez que Request.ServerVariables
contém todas as variáveis de ambiente, bem como os cabeçalhos, onde Request.Headers
há uma lista muito mais curta que contém apenas os cabeçalhos.
Portanto, a melhor solução é usar a Request.Headers
coleção para ler o valor diretamente. No entanto, preste atenção aos avisos da Microsoft sobre a codificação HTML do valor, se você for exibi-lo em um formulário.
Referer
cabeçalho é escrito de forma diferente da HTTP_REFERRER
variável do servidor.
Assim: HttpRequest.UrlReferrer Property
Uri myReferrer = Request.UrlReferrer;
string actual = myReferrer.ToString();
Estou usando .Net Core 2 mvc, este funciona para mim (para obter a página de pré-visualizações):
HttpContext.Request.Headers["Referer"];
Uma vez que o Google leva você a este post ao pesquisar, C# Web API Referrer
aqui está o negócio: Web API
usa um tipo diferente de chamado Request
normal que não inclui . Como uma solicitação normal não inclui essas informações, se você realmente precisar delas, faça com que seus clientes façam o possível para incluí-las. Embora você possa fazer com que isso faça parte do seu , a melhor maneira é usar .MVC Request
HttpRequestMessage
UrlReferrer
Web API
API Object
Headers
Primeiro, você pode estender HttpRequestMessage
para fornecer um UrlReferrer()
método:
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
para API Request
:
// Microsoft.AspNet.WebApi.Client
client.DefaultRequestHeaders.Referrer = new Uri(url);
E agora Web API Request
inclui os dados de referência que você pode acessar assim a partir de Web API
:
Request.UrlReferrer();
string referrer = HttpContext.Current.Request.UrlReferrer.ToString();