我正在寻找一种快速,简单且可靠的方法来获取 ASP.Net ( C#)中浏览器的 HTTP推荐人。我知道HTTP Referrer本身是不可靠的,但如果 存在,我确实需要一种可靠的方法来获取引用者。
答案 0 :(得分:158)
答案 1 :(得分:19)
使用Request.UrlReferrer
属性。
在幕后,它只是检查ServerVariables("HTTP_REFERER")
属性。
答案 2 :(得分:16)
Request.Headers["Referer"]
如果引用HTTP标头格式不正确,Request.UrlReferer
将抛出System.UriFormatException
(这可能发生,因为它通常不受您的控制)。
至于使用Request.ServerVariables
,根据MSDN:
Request.ServerVariables Collection
ServerVariables集合检索预定环境变量的值并请求标头信息。
Request.Headers Property
获取HTTP标头的集合。
Request.Headers
是比Request.ServerVariables
更好的选择,因为Request.ServerVariables
包含所有环境变量以及标题,其中Request.Headers
是一个更短的列表,只有Request.Headers
包含标题。
所以最好的解决方案是使用{{1}}集合直接读取值。如果您打算在表单上显示该值,请注意Microsoft关于HTML编码值的警告。
答案 3 :(得分:12)
像这样:HttpRequest.UrlReferrer Property
Uri myReferrer = Request.UrlReferrer;
string actual = myReferrer.ToString();
答案 4 :(得分:9)
由于Google在此处搜索C# Web API Referrer
时会将您转到此帖:Web API
使用来自普通Request
MVC Request
的其他类型的HttpRequestMessage
UrlReferrer
{1}}不包含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();
访问的引荐来源数据:
bodyBytes, err := ioutil.ReadAll(resp.Body)
if err != nil {
// err
} else {
cachedBody := string(bodyBytes)
// Restore the io.ReadCloser to its original state
// This is causing huge increases in memory usage.
resp.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))
}
答案 5 :(得分:7)
我正在使用.Net Core 2 mvc, 这个对我有用(要获得预览页面):
HttpContext.Request.Headers["Referer"];
答案 6 :(得分:1)
string referrer = HttpContext.Current.Request.UrlReferrer.ToString();
答案 7 :(得分:1)
有时你必须提供像这样的所有链接
System.Web.HttpContext.Current.Request.UrlReferrer.ToString();
(在“当前”未成立时的选项中)
答案 8 :(得分:0)
属于其他答复,我添加了条件子句以获取空值。
string ComingUrl = "";
if (Request.UrlReferrer != null)
{
ComingUrl = System.Web.HttpContext.Current.Request.UrlReferrer.ToString();
}
else
{
ComingUrl = "Direct"; // Your code
}