Obteniendo el HTTP Referrer en ASP.NET

Estoy buscando una forma rápida, fácil y confiable de obtener HTTP Referrer del navegador en ASP.Net ( C # ). Sé que HTTP Referrer en sí no es confiable, pero sí quiero una forma confiable de obtener el referrer si está presente.

Puede usar la propiedad UrlReferrer de la solicitud actual:

Request.UrlReferrer 

Esto leerá el encabezado HTTP Referer de la solicitud que puede o no ser suministrado por el cliente (agente de usuario).

Use la propiedad Request.UrlReferrer .

Debajo de las escenas, solo está comprobando la ServerVariables("HTTP_REFERER") .

De esta manera: Propiedad HttpRequest.UrlReferrer

 Uri myReferrer = Request.UrlReferrer; string actual = myReferrer.ToString(); 
 Request.Headers["Referer"] 

Explicación

El Request.UrlReferer arrojará una System.UriFormatException si el encabezado HTTP del referer está mal formado (lo que puede suceder ya que generalmente no está bajo su control).

En cuanto al uso de Request.ServerVariables , por MSDN:

Colección Request.ServerVariables

La colección ServerVariables recupera los valores de variables de entorno predeterminadas y solicita información de encabezado.

Propiedad de Request.Headers

Obtiene una colección de encabezados HTTP.

Request.Headers es una mejor opción que Request.ServerVariables , ya que Request.ServerVariables contiene todas las variables de entorno, así como los encabezados, donde Request.Headers es una lista mucho más corta que solo contiene los encabezados.

Entonces, la mejor solución es usar la colección Request.Headers para leer el valor directamente. Sin embargo, preste atención a las advertencias de Microsoft sobre el código HTML que codifica el valor si va a mostrarlo en un formulario.

Dado que Google lo lleva a esta publicación cuando busca C# Web API Referrer , esta es la oferta: Web API utiliza un tipo diferente de Request de la MVC Request normal llamada HttpRequestMessage que no incluye UrlReferrer . Dado que una solicitud normal de la Web API no incluye esta información, si realmente la necesita, debe hacer que sus clientes se desviejen para incluirla. Aunque puede hacer que esto sea parte de su API Object , una mejor manera es usar Headers .

En primer lugar, puede extender HttpRequestMessage para proporcionar un método UrlReferrer() :

 public static string UrlReferrer(this HttpRequestMessage request) { return request.Headers.Referrer == null ? "unknown" : request.Headers.Referrer.AbsoluteUri; } 

Entonces sus clientes necesitan configurar el Referrer Header en su API Request :

 // Microsoft.AspNet.WebApi.Client client.DefaultRequestHeaders.Referrer = new Uri(url); 

Y ahora, la Web API Request incluye los datos de referencia a los que puede acceder así desde su Web API :

 Request.UrlReferrer(); 

Estoy usando .Net Core 2 mvc, este funciona para mí (para obtener la página de vistas previas):

 HttpContext.Request.Headers["Referer"]; 
 string referrer = HttpContext.Current.Request.UrlReferrer.ToString(); 

En algún momento debe dar todo el enlace como este

 System.Web.HttpContext.Current.Request.UrlReferrer.ToString(); 

(en opción cuando “Actual” no está fundado)