在ASP.NET中获取HTTP引用
我正在寻找一种快速,简单和可靠的方式来获取浏览器的HTTP Referrer在ASP.Net ( C# )。 我知道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();