Я ищу быстрый, простой и надежный способ получения HTTP-реферера браузера в ASP.Net ( C # ). Я знаю , что HTTP Referrer сам ненадежна, но я хочу , надежный способ получения реферер , если она есть присутствует.
Я ищу быстрый, простой и надежный способ получения HTTP-реферера браузера в ASP.Net ( C # ). Я знаю , что HTTP Referrer сам ненадежна, но я хочу , надежный способ получения реферер , если она есть присутствует.
Ответы:
Вы можете использовать свойство UrlReferrer текущего запроса:
Request.UrlReferrer
Это будет читать HTTP-заголовок Referer из запроса, который может быть предоставлен или не предоставлен клиентом (пользовательским агентом).
Request.UrlReferrerпосле обратной передачи на стороне сервера. Конечно Request.UrlReferrer, теперь будет иметь значение страницы, на которую вы отправляете сообщение. В большинстве случаев людям нужна предыдущая страница. В этом случае убедитесь, что вы сохраняете предыдущую страницу, скажем, в переменной viewstate при первой загрузке страницы. И затем, когда вы обращаетесь к этой переменной, у нее появляется предыдущая страница, с которой вы пришли. Например, в событии загрузки страницы форм 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:
Коллекция Request.ServerVariables
Коллекция ServerVariables извлекает значения предопределенных переменных среды и информацию заголовка запроса.
Request.Headers Свойство
Получает коллекцию заголовков 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();