Я шукаю швидкий, простий і надійний спосіб отримати HTTP-реферал браузера в ASP.Net ( C # ). Я знаю , що HTTP Referrer сам ненадійна, але я хочу , надійний спосіб отримання реферер , якщо вона є присутня.
Я шукаю швидкий, простий і надійний спосіб отримати HTTP-реферал браузера в ASP.Net ( C # ). Я знаю , що HTTP Referrer сам ненадійна, але я хочу , надійний спосіб отримання реферер , якщо вона є присутня.
Відповіді:
Ви можете використовувати властивість UrlReferrer поточного запиту:
Request.UrlReferrer
Це зчитує заголовок HTTP Referer з запиту, який може бути, а може і не надати клієнт (агент користувача).
Request.UrlReferrer
після зворотного зв'язку з сервером. Звичайно Request.UrlReferrer
, тепер буде значення сторінки, на яку ви надсилаєте повідомлення. У більшості випадків людям потрібна попередня сторінка. У цьому випадку переконайтесь, що ви зберігаєте попередню сторінку у змінній перегляду, коли сторінка завантажується. І тоді, коли ви отримуєте доступ до цієї змінної, вона має попередню сторінку, з якої ви прийшли. Наприклад, у події завантаження сторінки asp.net ви можете зробити:if (Request.UrlReferrer != null) ViewState["PreviousPageUrl"] = Request.UrlReferrer.ToString();
Response.Redirect(ViewState["PreviousPageUrl"] != null ? ViewState["PreviousPageUrl"].ToString() : "SomeOtherPage.aspx");
Використовуйте Request.UrlReferrer
майно.
Під сценами він просто перевіряє ServerVariables("HTTP_REFERER")
майно.
UrlReferrer
це набагато більше, ніж простий дзвінокServerVariables("HTTP_REFERER")
ServerVariables["HTTP_REFERER"]
повертає рядок , тоді як Request.UrlReferrer
повертає Uri .
Request.Headers["Referer"]
Request.UrlReferer
Властивість буде кидати , System.UriFormatException
якщо реферер HTTP заголовок неправильний формат (що може статися , так як це зазвичай не під вашим контролем).Що стосується використання Request.ServerVariables
, на MSDN:
Запит. Колекція серверних змінних
Колекція ServerVariables витягує значення заздалегідь визначених змінних середовищ і запитує інформацію заголовка.
Запит. Голосування власника
Отримує колекцію заголовків HTTP.
Request.Headers
є кращим вибором, ніж Request.ServerVariables
, оскільки Request.ServerVariables
містить усі змінні середовища, а також заголовки, де Request.Headers
набагато коротший список, який містить лише заголовки.
Тож найкращим рішенням є використання Request.Headers
колекції для читання значення безпосередньо. Однак слідкуйте за попередженнями Microsoft про кодування HTML значення, якщо ви збираєтеся відображати його у формі.
Referer
заголовок написано інакше, ніж HTTP_REFERRER
змінна сервер.
Як це: Властивість HttpRequest.UrlReferrer
Uri myReferrer = Request.UrlReferrer;
string actual = myReferrer.ToString();
Я використовую .Net Core 2 mvc, ця робота для мене (щоб отримати сторінку попереднього перегляду):
HttpContext.Request.Headers["Referer"];
Оскільки Google шукає вас на цю посаду під час пошуку C# Web API Referrer
ось угоди: Web API
використовується інший тип Request
звичайного, що MVC Request
називається, HttpRequestMessage
який не включає UrlReferrer
. Оскільки звичайний Web API
запит не включає цю інформацію, якщо вона вам справді потрібна, ви повинні змусити своїх клієнтів вийти зі шляху, щоб їх включити. Хоча ви могли б зробити це частиною вашого API Object
, кращим способом є використання Headers
.
По-перше, ви можете розширити, HttpRequestMessage
щоб надати UrlReferrer()
метод:
public static string UrlReferrer(this HttpRequestMessage request)
{
return request.Headers.Referrer == null ? "unknown" : request.Headers.Referrer.AbsoluteUri;
}
Тоді ваші клієнти повинні встановити Referrer Header
свої API Request
:
// Microsoft.AspNet.WebApi.Client
client.DefaultRequestHeaders.Referrer = new Uri(url);
А тепер Web API Request
включає в себе дані реферала, до яких ви можете отримати доступ таким чином зі свого Web API
:
Request.UrlReferrer();
string referrer = HttpContext.Current.Request.UrlReferrer.ToString();