Uzyskanie Referrera HTTP w ASP.NET

Szukam szybkiego, łatwego i niezawodnego sposobu na uzyskanie http Referrer w ASP.Net ( C # ). Wiem, że sam Referrer HTTP jest zawodny, ale chcę niezawodnego sposobu uzyskania referrera, Jeśli jest obecny.

Author: skeletank, 2010-11-23

8 answers

Możesz użyć właściwości UrlReferrer bieżącego żądania:

Request.UrlReferrer

Spowoduje to odczytanie nagłówka HTTPReferer z żądania, które może lub nie musi być dostarczone przez Klienta (user agent).

 152
Author: Darin Dimitrov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-23 16:28:36

Użyj właściwości Request.UrlReferrer.

Pod scenami jest tylko sprawdzanie właściwości ServerVariables("HTTP_REFERER").

 18
Author: Dismissile,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-07 13:29:14

W ten sposób: HttpRequest.Urlreferrer Property

Uri myReferrer = Request.UrlReferrer;
string actual = myReferrer.ToString();
 12
Author: Tom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-09 10:41:16
Request.Headers["Referer"]

Wyjaśnienie

Request.UrlReferer rzuci System.UriFormatException, jeśli nagłówek HTTP referera jest zniekształcony(co może się zdarzyć, ponieważ zwykle nie jest pod twoją kontrolą).

Jeśli chodzi o użycie Request.ServerVariables, na MSDN:

Prośba.ServerVariables Collection

Kolekcja ServerVariables pobiera wartości wcześniej określonych zmiennych środowiskowych i informacji nagłówka żądania.

Prośba.Headers Property

Pobiera kolekcję nagłówków HTTP.

Request.Headers jest lepszym Wyborem niż Request.ServerVariables, ponieważ Request.ServerVariables zawiera wszystkie zmienne środowiskowe, a także nagłówki, gdzie Request.Headers jest znacznie krótszą listą zawierającą tylko nagłówki.

Więc najlepszym rozwiązaniem jest użycie kolekcji Request.Headers do bezpośredniego odczytu wartości. Uważaj jednak na ostrzeżenia Microsoftu o kodowaniu HTML wartości, jeśli zamierzasz ją wyświetlić w formularzu.

 12
Author: NightOwl888,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-16 14:53:16

Ponieważ Google zabiera cię do tego postu podczas wyszukiwania C# Web API Referrer oto umowa: Web API używa innego typu Request od normalnego MVC Request o nazwie HttpRequestMessage, która nie zawiera UrlReferrer. Ponieważ zwykłe Web API żądanie nie zawiera tych informacji, jeśli naprawdę ich potrzebujesz, musisz mieć swoich klientów, aby je uwzględnić. Chociaż możesz sprawić, że będzie to częścią twojego API Object, lepszym sposobem jest użycie Headers.

Po pierwsze, możesz rozszerzyć HttpRequestMessage, aby zapewnić UrlReferrer() "metoda": {]}

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

Następnie twoi klienci muszą ustawić Referrer Header na ich API Request:

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

A teraz Web API Request zawiera dane odsyłające, do których możesz uzyskać dostęp z twojego Web API:

Request.UrlReferrer();
 8
Author: Serj Sagan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-08 05:47:28

Używam. Net Core 2 mvc, ta jedna mi działa (aby uzyskać Stronę Zapowiedzi):

HttpContext.Request.Headers["Referer"];
 4
Author: Saad Hasan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-22 10:01:25
string referrer = HttpContext.Current.Request.UrlReferrer.ToString();
 1
Author: Donat Sasin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-04 14:57:06

Kiedyś musisz podać cały link w ten sposób

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

(w opcji, gdy "Aktualny" nie jest założony)

 0
Author: Sportac,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-06 15:01:57