Я ищу быстрый, простой и надежный способ получения 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();