buguge - Keep it simple,stupid

知识就是力量,但更重要的,是运用知识的能力why buguge?

导航

Request.UrlReferrer注意点

定义:

public sealed class HttpRequest
{
        //
        // 摘要: 
        //     获取有关客户端上次请求的 URL 的信息,该请求链接到当前的 URL。
        //
        // 返回结果: 
        //     一个 System.Uri 对象。
        //
        // 异常: 
        //   System.UriFormatException:
        //     HTTP Referer 请求标头格式不正确,并且不能被转换为 System.Uri 对象。
        public Uri UrlReferrer { get; }
}

 注意方法注释中的“客户端”。

 

在使用Request.UrlReferrer时要注意: 

1.如果上一页面使用document.location方法导航到当前页面,Request.UrlReferrer返回空值 
2.如果有A,B两个页面,在浏览器中直接请求A页面,在A页面的中Page_Load事件中导航到B 页面,则 Request.UrlReferrer返回空。因为 在Page_load事件中页面还未初始化,所以无法记录当前页的信息,导航到b页面也就无法获得上一页面的信息 
3.点击刷新按钮不会改变Request.UrlReferrer

 

其中,关于第2点,在Page_Load里方法里执行跳转,因为回发给浏览器的是跳转的目标页(原页面并无回发),所以取不到Request.UrlReferrer。已亲测。

我今天遇到的问题是,上游三方系统调用我的接口a1.ashx,从a1.ashx的ProcessRequest方法里执行Response.Redirect方法跳转到站内的a2.ashx,结果在a2里获取Request.UrlReferrer.Host得到的是上游三方系统的域名。 可见,用上面的第2点可以解释。

posted on 2017-05-22 19:50  buguge  阅读(324)  评论(0编辑  收藏  举报