在ASP.NET中获取HTTP Referrer

问题描述 投票:94回答:9

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

c# asp.net http http-headers http-referer
9个回答
160
投票

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

Request.UrlReferrer

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


19
投票

使用Request.UrlReferrer属性。

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


16
投票
Request.Headers["Referer"]

Explanation

如果referer HTTP标头格式不正确,Request.UrlReferer将抛出System.UriFormatException(这可能发生,因为它通常不在你的控制之下)。

至于使用Request.ServerVariables,每个MSDN:

Request.ServerVariables集合

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

Request.Headers Property

获取HTTP标头的集合。

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

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


12
投票

像这样:HttpRequest.UrlReferrer Property

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

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();

8
投票

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

HttpContext.Request.Headers["Referer"];

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

1
投票

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

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

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


0
投票

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

string ComingUrl = "";
if (Request.UrlReferrer != null)
{
    ComingUrl = System.Web.HttpContext.Current.Request.UrlReferrer.ToString();
}
else
{
    ComingUrl = "Direct"; // Your code
}
© www.soinside.com 2019 - 2024. All rights reserved.