1

I want to know-from what url user come from. So, i use

Uri MyUrl = Request.UrlReferrer;

But when i get only null value from MyUrl:

I have two projects-first is my aspx page, second- redirects to this first project-page with GET parameters. But when second project redirect to first project- i have :

Object reference not set to an instance of an object.

My second test project so simple:

 protected void Page_Load(object sender, EventArgs e)
    {
        Response.Redirect("http://localhost:54287/go.aspx?id=DEFAULT");
    }

First and main project:

 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);
        }
    }

Error in :Response.Write("Referrer URL : " + MyUrl.AbsolutePath);

4

2 回答 2

1

UrlReferrer基于HTTP_REFERER浏览器应发送的标头。但是,与留给客户的所有事情一样,它是可变的。

我知道一些“安全”套件(如 Norton 的 Internet Security)会去除该标题,相信它有助于跟踪用户行为。另外,我确信有一些 Firefox 扩展可以做同样的事情。

底线是你不应该相信它。只需将 url 附加到 GET 字符串并以此为基础进行重定向。

参考: Stackover 流程​​参考

于 2013-08-26T11:56:44.953 回答
1

好的,有几个错误:

你的代码:

Uri MyUrl = Request.UrlReferrer;
Console.WriteLine(MyUrl);
Response.Write("Referrer URL : " + MyUrl.AbsolutePath);

在上面的代码中,您会得到一个NullReferenceExceptionbecause MyUrlis null

可能为空,因此UrlReferer您必须像这样检查:

Uri MyUrl = Request.UrlReferrer;
Console.WriteLine(MyUrl);
if (MyUrl != null)
   Response.Write("Referrer URL : " + MyUrl.AbsolutePath);

此外,您永远无法确保UrlReferer可以有一个值,如果用户来自另一个网站,您不知道该网站是否会提供此值,因此您必须首先假设引荐来源网址是null(总而言之,永远不要相信它)。

其次,当您在服务器端Response.Redirect运行代码时,您不知道引荐来源网址是什么。

我发现这个问题这个问题将帮助您更好地理解。

于 2013-08-26T11:56:45.127 回答