在ASP.NET中获取HTTP引用

我正在寻找一种快速,简单和可靠的方式来获取浏览器的HTTP ReferrerASP.NetC# )。 我知道HTTP Referrer本身是不可靠的,但我确实需要一个可靠的方式来获取引用者,如果它存在的。

您可以使用当前请求的UrlReferrer属性:

Request.UrlReferrer 

这将从客户端(用户代理)可能提供或可能不提供的请求中读取Referer HTTP头。

使用Request.UrlReferrer属性。

在幕后,它只是检查ServerVariables("HTTP_REFERER")属性。

 Request.Headers["Referer"] 

说明

Request.UrlReferer将抛出一个System.UriFormatException如果引用HTTP标头格式不正确(这可能发生,因为它通常不受您的控制)。

至于使用Request.ServerVariables ,每个MSDN:

Request.ServerVariables集合

ServerVariables集合检索预定的环境variables和请求头信息的值。

Request.Headers属性

获取HTTP标头的集合。

Request.Headers是一个比Request.ServerVariables更好的select,因为Request.ServerVariables包含所有的环境variables以及头,其中Request.Headers是一个只包含头的更短的列表。

所以最好的解决scheme是使用Request.Headers集合直接读取值。 不过,如果你要在表单上显示,那么请注意微软的HTML编码警告。

像这样: HttpRequest.UrlReferrer属性

 Uri myReferrer = Request.UrlReferrer; string actual = myReferrer.ToString(); 

因为Google在searchC# Web API Referrer时会带你到这篇文章中: Web API使用来自正常MVC Request的不同types的Request ,名为HttpRequestMessage ,它不包含UrlReferrer 。 由于一个普通的Web API请求不包含这个信息,如果你确实需要它,你必须让你的客户端去包含它。 尽pipe可以将它作为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();