2010-11-23 66 views
81

Estoy buscando una manera rápida, fácil y fiable de conseguir Referente HTTP del navegador en ASP.Net (C#). Sé que HTTP Referrer en sí no es confiable, pero sí quiero una forma confiable de obtener la referencia si es presente.Conseguir el Referente HTTP en ASP.NET

+2

posible duplicado de [¿Cómo consigo la URL de referencia en una acción ASP.NET MVC?] (http: // st ackoverflow.com/questions/1471188/how-do-i-get-the-referrer-url-in-an-asp-net-mvc-action) –

+0

Fro Asp.Net Core ver [¿Cómo puedo obtener URL de referencia en ASP .NET MVC Core?] (// stackoverflow.com/q/38772394) –

Respuesta

144

Usted puede utilizar la propiedad UrlReferrer de la solicitud actual:

Request.UrlReferrer 

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

+7

debe tenerse en cuenta que esta propiedad será lanzar una System.UriFormatException si la cabecera HTTP árbitro está mal formado. – NightOwl888

+1

@Darin Dimitrov Estoy tratando de crear una API REST usando la API WEB. UrlReferrer no es parte del objeto Solicitud. ¿Debo agregar algo de "usar", etc. ¿Qué me estoy perdiendo? una DLL? – Ravi

+1

Cabe señalar que la diferencia es la ortografía es correcta. El encabezado http está mal escrito. MS usa la ortografía correcta en el nombre de la propiedad. Lamentablemente, los dos no coinciden, lo que puede causar confusión a algunas personas (me) al realizar la prueba. – John

17

Utilice la propiedad Request.UrlReferrer.

Debajo de las escenas solo está revisando la propiedad ServerVariables("HTTP_REFERER").

+2

Así que no habría nada diferente si utilicé: HttpContext.Current.Request.ServerVariables [ "HTTP_REFERER "]? –

+2

En teoría no hay diferencia, en la práctica no puedo asegurarlo ya que un vistazo rápido con reflector muestra que 'UrlReferrer' hace mucho más que una simple llamada a' ServerVariables ("HTTP_REFERER") ' – Diadistis

+12

Puedo decirle que 'ServerVariables [" HTTP_REFERER "]' devuelve una * cadena *, mientras que 'Request.UrlReferrer' devuelve un * Uri *. –

10

De esta manera: HttpRequest.UrlReferrer Property

Uri myReferrer = Request.UrlReferrer; 
string actual = myReferrer.ToString(); 
+1

Para salvaguardar contra null, puede decir: string actual = "" + Request.UrlReferrer ?? "(defecto)"; // (predeterminado) puede estar en la cadena vacía – Sheepy

12
Request.Headers["Referer"] 

Explicación

El Request.UrlReferer arrojará un System.UriFormatException si la cabecera árbitro HTTP está mal formado (que puede suceder ya que no es por lo general bajo su control).

En cuanto a usar Request.ServerVariables, por MSDN:

Request.ServerVariables Colección

La colección ServerVariables recupera los valores de las variables de entorno predeterminadas e información de encabezado de solicitud.

Request.Headers Propiedad

Obtiene una colección de cabeceras HTTP.

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

Así que la mejor solución es utilizar 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.

+1

Tenga en cuenta que el encabezado 'Referer' se deletrea de forma diferente que la variable de servidor' HTTP_REFERRER'. –

8

Desde Google te lleva a este puesto en la búsqueda de C# Web API Referrer éste es el trato: Web API utiliza un tipo diferente de Request de normal MVC Request llamada HttpRequestMessage que no incluye UrlReferrer. Dado que una solicitud normal de Web API no incluye esta información, si realmente la necesita, debe hacer que sus clientes se desviejen para incluirla. Aunque podría hacer que esto sea parte de su API Object, una mejor manera es usar Headers.

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

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

A continuación, sus clientes necesitan para establecer el Referrer Header a su API Request:

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

Y ahora el Web API Request incluye los datos de referencia que se puede acceder así desde su Web API:

Request.UrlReferrer(); 
1
string referrer = HttpContext.Current.Request.UrlReferrer.ToString(); 
0

estoy usando .Net Core 2 MVC, éste trabajo para mí (para obtener vistas previas de la página):

HttpContext.Request.Headers["Referer"]; 
0

En algún momento usted debe dar todo el enlace tal que así

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

(en opción al "actual" no fundada)

Cuestiones relacionadas