用户来自ASP.Net但为NULL的URL
本文关键字:NULL URL 但为 Net ASP 用户 | 更新日期: 2023-09-27 18:28:59
我想知道用户来自哪个url。所以,我使用
Uri MyUrl = Request.UrlReferrer;
但是当我从MyUrl:中只得到空值时
我有两个项目,第一个是我的aspx页面,第二个是用GET参数重定向到第一个项目页面。但当第二个项目重定向到第一个项目时,我有:
对象引用未设置为对象的实例
我的第二个测试项目很简单:
protected void Page_Load(object sender, EventArgs e)
{
Response.Redirect("http://localhost:54287/go.aspx?id=DEFAULT");
}
第一个也是主要项目:
protected void Page_Load(object sender, EventArgs e)
{
//Request.ServerVariables('http_referer');
// Request.ServerVariables;
string id = Request.QueryString["id"];
if (id != null)
{
Uri MyUrl = Request.UrlReferrer;
Console.WriteLine(MyUrl);
Response.Write("Referrer URL : " + MyUrl.AbsolutePath);
}
}
错误:Response.Write("Referrer URL:"+MyUrl.AbsolutePath);
好的,有几个错误:
您的代码:
Uri MyUrl = Request.UrlReferrer;
Console.WriteLine(MyUrl);
Response.Write("Referrer URL : " + MyUrl.AbsolutePath);
在上面的代码中,您得到了一个NullReferenceException
,因为MyUrl
是null
。
UrlReferer
可能为空,因此您必须检查以下内容:
Uri MyUrl = Request.UrlReferrer;
Console.WriteLine(MyUrl);
if (MyUrl != null)
Response.Write("Referrer URL : " + MyUrl.AbsolutePath);
此外,你永远无法确保UrlReferer
可以有值,如果用户来自另一个网站,你不知道这个网站是否会提供这个值,所以你必须首先假设推荐人是null
(总之,永远不要相信它)。
其次,当您在服务器端运行的代码上使用Response.Redirect
时,您不知道什么是referr。
我发现这个问题,这个问题将帮助你更好地理解。
UrlReferrer
基于浏览器应该发送的HTTP_REFERER
标头。但是,就像所有留给客户的事情一样,它是可变的。
我知道一些"安全"套件(比如Norton的Internet security)会去掉这个标题,因为它有助于跟踪用户行为。此外,我相信也有一些Firefox扩展可以做同样的事情。
最重要的是,你不应该信任它。只需将url附加到GET字符串中,然后根据它进行重定向。
参考:堆叠流参考