我正在寻找一种在ASP.Net(C#)中获取浏览器的HTTP Referrer的快速,简便和可靠的方法。我知道HTTP推荐本身是不可靠的,但我确实希望得到引荐,如果它的可靠方法是存在。
我正在寻找一种在ASP.Net(C#)中获取浏览器的HTTP Referrer的快速,简便和可靠的方法。我知道HTTP推荐本身是不可靠的,但我确实希望得到引荐,如果它的可靠方法是存在。
Answers:
Request.UrlReferrer
在服务器端回发后使用,请小心。当然,Request.UrlReferrer
现在将具有您要发布回的页面的值。在大多数情况下,人们需要上一页。在这种情况下,请确保在第一次加载页面时将前一页存储在一个viewstate变量中。然后,当您访问此变量时,它具有您来自的上一页。例如,在asp.net表单页面加载事件中,您可以执行以下操作:if (Request.UrlReferrer != null) ViewState["PreviousPageUrl"] = Request.UrlReferrer.ToString();
Response.Redirect(ViewState["PreviousPageUrl"] != null ? ViewState["PreviousPageUrl"].ToString() : "SomeOtherPage.aspx");
使用该Request.UrlReferrer
属性。
在场景下,只是检查ServerVariables("HTTP_REFERER")
属性。
UrlReferrer
功能ServerVariables("HTTP_REFERER")
ServerVariables["HTTP_REFERER"]
返回一个字符串,而Request.UrlReferrer
返回一个Uri。
Request.Headers["Referer"]
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编码值的警告。
Referer
标头的拼写与HTTP_REFERRER
服务器变量的拼写不同。
Uri myReferrer = Request.UrlReferrer;
string actual = myReferrer.ToString();
我正在使用.Net Core 2 mvc,这对我有用(获取预览页):
HttpContext.Request.Headers["Referer"];
由于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 Header
为API Request
:
// Microsoft.AspNet.WebApi.Client
client.DefaultRequestHeaders.Referrer = new Uri(url);
现在,Web API Request
其中包含引荐来源网址数据,您可以通过以下方式访问该网址Web API
:
Request.UrlReferrer();
string referrer = HttpContext.Current.Request.UrlReferrer.ToString();