Я шукаю швидкий, простий і надійний спосіб отримати 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();