113

我正在寻找一种在ASP.Net ( C# )中获取浏览器的HTTP Referrer的快速、简单且可靠的方法。我知道 HTTP 引荐来源网址本身是不可靠的,但我确实想要一种可靠的方式来获取引荐来源网址(如果存在)

4

10 回答 10

177

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

Request.UrlReferrer

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

于 2010-11-23T16:22:45.303 回答
26
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 编码该值的警告。

于 2014-09-05T20:42:14.960 回答
22

使用该Request.UrlReferrer物业。

在幕后,它只是检查ServerVariables("HTTP_REFERER")财产。

于 2010-11-23T16:22:45.970 回答
14

像这样:HttpRequest.UrlReferrer 属性

Uri myReferrer = Request.UrlReferrer;
string actual = myReferrer.ToString();
于 2010-11-23T16:24:02.153 回答
12

我正在使用.Net Core 2 mvc,这对我有用(获取预览页面):

HttpContext.Request.Headers["Referer"];
于 2017-11-22T14:23:08.387 回答
9

由于谷歌在搜索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();
于 2015-09-08T05:47:28.240 回答
3
string referrer = HttpContext.Current.Request.UrlReferrer.ToString();
于 2016-11-04T14:57:06.480 回答
2

有时您必须像这样提供所有链接

System.Web.HttpContext.Current.Request.UrlReferrer.ToString();

(在“当前”未创建时的选项中)

于 2017-12-06T15:01:57.327 回答
0

使用 .NET Core 或 .NET 5 我会推荐这个:

httpContext.Request.Headers.TryGetValue("Referer", out var refererHeader)
于 2021-08-13T13:02:10.067 回答
0

属于其他回复,我添加了获取 null 的条件子句。

string ComingUrl = "";
if (Request.UrlReferrer != null)
{
    ComingUrl = System.Web.HttpContext.Current.Request.UrlReferrer.ToString();
}
else
{
    ComingUrl = "Direct"; // Your code
}
于 2019-03-05T10:03:36.017 回答