在ASP.NET中获取HTTP Referrer

时间:2010-11-23 16:19:45

标签: c# asp.net http http-headers http-referer

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

9 个答案:

答案 0 :(得分:158)

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

Request.UrlReferrer

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

答案 1 :(得分:19)

使用Request.UrlReferrer属性。

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

答案 2 :(得分:16)

Request.Headers["Referer"]

解释

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

至于使用Request.ServerVariables,根据MSDN:

Request.ServerVariables Collection

  

ServerVariables集合检索预定环境变量的值并请求标头信息。

Request.Headers Property

  

获取HTTP标头的集合。

Request.Headers是比Request.ServerVariables更好的选择,因为Request.ServerVariables包含所有环境变量以及标题,其中Request.Headers是一个更短的列表,只有Request.Headers包含标题。

所以最好的解决方案是使用{{1}}集合直接读取值。如果您打算在表单上显示该值,请注意Microsoft关于HTML编码值的警告。

答案 3 :(得分:12)

像这样:HttpRequest.UrlReferrer Property

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

答案 4 :(得分:9)

由于Google在此处搜索C# Web API Referrer时会将您转到此帖:Web API使用来自普通Request MVC Request的其他类型的HttpRequestMessage UrlReferrer {1}}不包含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(); 访问的引荐来源数据:

bodyBytes, err := ioutil.ReadAll(resp.Body)
if err != nil {
    // err
} else {
    cachedBody := string(bodyBytes)

    // Restore the io.ReadCloser to its original state
    // This is causing huge increases in memory usage.
    resp.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))
}

答案 5 :(得分:7)

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

HttpContext.Request.Headers["Referer"];

答案 6 :(得分:1)

string referrer = HttpContext.Current.Request.UrlReferrer.ToString();

答案 7 :(得分:1)

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

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

(在“当前”未成立时的选项中)

答案 8 :(得分:0)

属于其他答复,我添加了条件子句以获取空值。

string ComingUrl = "";
if (Request.UrlReferrer != null)
{
    ComingUrl = System.Web.HttpContext.Current.Request.UrlReferrer.ToString();
}
else
{
    ComingUrl = "Direct"; // Your code
}