我正在寻找一种在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();