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.UrlReferrerapós um postback do lado do servidor. É claro Request.UrlReferrerque 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.UrlReferrerpropriedade.
Por baixo das cenas é só verificar a ServerVariables("HTTP_REFERER")propriedade.
UrlReferrerfaz muito mais do que uma simples ligação paraServerVariables("HTTP_REFERER")
ServerVariables["HTTP_REFERER"]retorna uma string , enquanto Request.UrlReferrerretorna um Uri .
Request.Headers["Referer"]
Request.UrlRefererpropriedade lançará um System.UriFormatExceptionse 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.ServerVariablescontém todas as variáveis de ambiente, bem como os cabeçalhos, onde Request.Headershá uma lista muito mais curta que contém apenas os cabeçalhos.
Portanto, a melhor solução é usar a Request.Headerscoleçã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.
Referercabeçalho é escrito de forma diferente da HTTP_REFERRERvariá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 Referreraqui está o negócio: Web APIusa um tipo diferente de chamado Requestnormal 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 RequestHttpRequestMessageUrlReferrerWeb APIAPI ObjectHeaders
Primeiro, você pode estender HttpRequestMessagepara 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 Headerpara API Request:
// Microsoft.AspNet.WebApi.Client
client.DefaultRequestHeaders.Referrer = new Uri(url);
E agora Web API Requestinclui os dados de referência que você pode acessar assim a partir de Web API:
Request.UrlReferrer();
string referrer = HttpContext.Current.Request.UrlReferrer.ToString();