在ASP.NET中获取HTTP Referrer


103

我正在寻找一种在ASP.NetC#)中获取浏览器的HTTP Referrer的快速,简便和可靠的方法。我知道HTTP推荐本身是不可靠的,但我确实希望得到引荐,如果它的可靠方法存在。



Answers:


166

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

Request.UrlReferrer

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


8
应该注意的是,如果引用HTTP标头格式错误,则此属性将引发System.UriFormatException。
NightOwl888 2014年

1
@Darin Dimitrov正在尝试使用WEB API创建REST API。UrlReferrer不是Request对象的一部分。我应该添加一些“使用中”等内容吗?我想念什么?DLL?
拉维

1
应该注意的是,差异是拼写是正确的。http标头拼写错误。MS在属性名称中使用正确的拼写。不幸的是,两者不匹配,这可能在测试时引起某些人(我)的困惑。
约翰

8
如果Request.UrlReferrer在服务器端回发后使用,请小心。当然,Request.UrlReferrer现在将具有您要发布回的页面的值。在大多数情况下,人们需要上一页。在这种情况下,请确保在第一次加载页面时将前一页存储在一个viewstate变量中。然后,当您访问此变量时,它具有您来自的上一页。例如,在asp.net表单页面加载事件中,您可以执行以下操作:if (Request.UrlReferrer != null) ViewState["PreviousPageUrl"] = Request.UrlReferrer.ToString();
JonH 2015年

4
...而当您发回邮件时,您可以执行以下操作:Response.Redirect(ViewState["PreviousPageUrl"] != null ? ViewState["PreviousPageUrl"].ToString() : "SomeOtherPage.aspx");
JonH

20

使用该Request.UrlReferrer属性。

在场景下,只是检查ServerVariables("HTTP_REFERER")属性。


2
因此,如果使用的话,不会有什么不同:HttpContext.Current.Request.ServerVariables [“ HTTP_REFERER”]吗?
Chuck Le Butt 2010年

2
从理论上讲没有区别,实际上我不能肯定地说,因为使用反射镜快速浏览后,显示的UrlReferrer功能ServerVariables("HTTP_REFERER")
远不

13
我可以告诉你,它ServerVariables["HTTP_REFERER"]返回一个字符串,而Request.UrlReferrer返回一个Uri
Chuck Le Butt 2010年

19
Request.Headers["Referer"]

说明

如果引荐来源网址HTTP标头格式错误(该错误通常不在您的控制之下),则该Request.UrlReferer属性将引发System.UriFormatException

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

Request.ServerVariables集合

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

Request.Headers属性

获取HTTP标头的集合。

Request.Headers与相比Request.ServerVariables,它是一个更好的选择,因为它Request.ServerVariables包含所有环境变量以及标头,其中的Request.Headers列表要短得多,仅包含标头。

因此最好的解决方案是使用Request.Headers集合直接读取值。但是,如果要在表单上显示该值,请注意Microsoft有关HTML编码值的警告。


2
请注意,Referer标头的拼写与HTTP_REFERRER服务器变量的拼写不同。
Rudey

13

像这样:HttpRequest.UrlReferrer属性

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

2
为了防止出现null,您可以说:string actual =“” + Request.UrlReferrer?“(默认)”; //(默认值)可以为空字符串
Sheepy


9

由于Google在搜索时会将您带到这篇文章,因此,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 HeaderAPI Request

// Microsoft.AspNet.WebApi.Client
client.DefaultRequestHeaders.Referrer = new Uri(url);

现在,Web API Request其中包含引荐来源网址数据,您可以通过以下方式访问该网址Web API

Request.UrlReferrer();


2

有时候你必须给所有这样的链接

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

(在未创建“当前”时选择)


0

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

string ComingUrl = "";
if (Request.UrlReferrer != null)
{
    ComingUrl = System.Web.HttpContext.Current.Request.UrlReferrer.ToString();
}
else
{
    ComingUrl = "Direct"; // Your code
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.