我正在寻找一种在ASP.Net ( C# )中获取浏览器的HTTP Referrer的快速、简单且可靠的方法。我知道 HTTP 引荐来源网址本身是不可靠的,但我确实想要一种可靠的方式来获取引荐来源网址(如果存在)。
10 回答
Request.Headers["Referer"]
解释
如果referer HTTP 标头格式错误(这可能会发生,因为它通常不受您的控制),该Request.UrlReferer
属性将抛出a 。System.UriFormatException
因此,该Request.UrlReferer
属性不是 100% 可靠的 - 它可能包含无法解析为Uri
类的数据。为确保该值始终可读,请Request.Headers["Referrer"]
改用。
至于使用Request.ServerVariables
这里其他人的建议,根据 MSDN:
Request.ServerVariables 集合
ServerVariables 集合检索预定环境变量的值和请求标头信息。
Request.Headers 属性
获取 HTTP 标头的集合。
Request.Headers
是比 更好的选择Request.ServerVariables
,因为Request.ServerVariables
它包含所有环境变量以及标头,其中Request.Headers
是一个更短的列表,仅包含标头。
所以最可靠的解决方案是使用Request.Headers
集合直接读取值。但是,如果您要在表单上显示该值,请注意 Microsoft 关于 HTML 编码该值的警告。
使用该Request.UrlReferrer
物业。
在幕后,它只是检查ServerVariables("HTTP_REFERER")
财产。
像这样:HttpRequest.UrlReferrer 属性
Uri myReferrer = Request.UrlReferrer;
string actual = myReferrer.ToString();
我正在使用.Net Core 2 mvc,这对我有用(获取预览页面):
HttpContext.Request.Headers["Referer"];
由于谷歌在搜索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();
有时您必须像这样提供所有链接
System.Web.HttpContext.Current.Request.UrlReferrer.ToString();
(在“当前”未创建时的选项中)
使用 .NET Core 或 .NET 5 我会推荐这个:
httpContext.Request.Headers.TryGetValue("Referer", out var refererHeader)
属于其他回复,我添加了获取 null 的条件子句。
string ComingUrl = "";
if (Request.UrlReferrer != null)
{
ComingUrl = System.Web.HttpContext.Current.Request.UrlReferrer.ToString();
}
else
{
ComingUrl = "Direct"; // Your code
}