我正在寻找一种快速,简单,可靠的方法来获取ASP.Net(C#)中浏览器的HTTP Referrer。我知道HTTP Referrer本身是不可靠的,但我确实想要一个可靠的方法来获取引用者(如果它存在)。
使用Request.UrlReferrer
属性。
在幕后它只是检查ServerVariables("HTTP_REFERER")
属性。
Request.Headers["Referer"]
如果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编码值的警告。
像这样:HttpRequest.UrlReferrer Property
Uri myReferrer = Request.UrlReferrer;
string actual = myReferrer.ToString();
由于谷歌在搜索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();
我正在使用.Net Core 2 mvc,这个适用于我(获取预览页面):
HttpContext.Request.Headers["Referer"];
string referrer = HttpContext.Current.Request.UrlReferrer.ToString();
有时您必须提供这样的所有链接
System.Web.HttpContext.Current.Request.UrlReferrer.ToString();
(在“当前”未成立时的选项中)
属于其他回复,我添加条件子句获取null。
string ComingUrl = "";
if (Request.UrlReferrer != null)
{
ComingUrl = System.Web.HttpContext.Current.Request.UrlReferrer.ToString();
}
else
{
ComingUrl = "Direct"; // Your code
}