zoukankan      html  css  js  c++  java
  • 【经验分享】ASP.NET 的 Page_Load 执行了2次,真的(启用了表单验证Form Authentication)!

    发现问题

    这是来自一位网友的提问:

    本着求真务实的态度,我打开了 AppBoxPro 项目,本地调试果然发现 Page_Load 进入了两次!

    其实在没测试之前,我就有了大概的方向,因为AppBoxPro是需要先登录的,莫非因为权限问题被重定向了一次,但是F12打开调试窗口,发现请求的的确确只有一个:

    分析问题

    之前好像也遇到过类似的问题,貌似是图片标签设了空的src属性导致的( <img src="">),网上查了一下,的确有很多人遇到这个问题。

    比如这个帖子:https://www.cnblogs.com/Simcoder/archive/2011/12/01/2270256.html

    但是我在页面上检查了一遍,虽然有 img 标签,但是其 src 属性都不为空!

    没办法,还是调试看看参数吧,毕竟两次进入 Page_Load 总该有所不同吧,来看下请求的URL:

    果然发现问题,解码后第二次的请求URL是:http://localhost:7086/default.aspx?ReturnUrl=/__browserLink/requestData/e176fc91b6574240afa3a4f0f95e9ebd?version=2&version=2

    看到其中的 __browserLink 我好像突然明白了,这个不就是 Visual Studio 提供的一个工具嘛,好像是 VS2013 之后才引入的,可以让用户在VS中点击刷新按钮直接刷新相应的浏览器窗口,不过我对这玩意不感冒,从来不用过罢了。

    打开页面源代码,就能看到这个请求来自何处了:

    解决问题

    知道问题的根源,解决起来就很简单了,这里有两个方法。

    第一种方法简单粗暴,直接禁用VS Browser Link,反正我也没用过:

    第二种方法是给 VS Browser Link 放行,这个根本不需要进行身份认证,和网站的静态资源做同样的处理,修改Web.config文件:

    <location path="icon">
        <system.web>
          <authorization>
            <allow users="*" />
          </authorization>
        </system.web>
      </location>
      <location path="res">
        <system.web>
          <authorization>
            <allow users="*" />
          </authorization>
        </system.web>
      </location>
      <location path="res.axd">
        <system.web>
          <authorization>
            <allow users="*" />
          </authorization>
        </system.web>
      </location>
      <location path="__browserLink">
        <system.web>
          <authorization>
            <allow users="*" />
          </authorization>
        </system.web>
      </location>

    注意,上面的 __browserLink 配置项就是我们新增的!

    搞定!

    等等

    好像有点问题,既然是一个被拦截的 URL:http://localhost:7086/default.aspx?ReturnUrl=/__browserLink/requestData/e176fc91b6574240afa3a4f0f95e9ebd?version=2&version=2

    为啥前面的 F12 看不到这个请求,这个不合理吧!

    的确如此,既然是一个HTTP请求,就不可能逃出 F12 的监控,我们再次运行页面,发现这个请求却原来是一个 AJAX 请求:

    前面我们使用 Doc 过滤项,自然是看不到这个 AJAX 请求了。

    至此,问题完美解决。

    不忘初心,砥砺前行!

  • 相关阅读:
    2.谈谈算法
    1.数据结构和算法笔记
    初次使用博客
    Unity中关于在一个场景中使用多个摄像机
    基于unity的单例设计模式写法
    unity3D读取Txt文件中信息
    转载雨松的unity中使用ITween插件和ITweenPath
    Unity3D游戏开发之数据持久化PlayerPrefs的使用
    [转载]Unity3d更改3d Text的字体的材质球的shader,使字体不显示
    C#写的Socket Server端在unity运行时和关闭时没事,但是在打开直接unity崩溃问题
  • 原文地址:https://www.cnblogs.com/sanshi/p/11279619.html
Copyright © 2011-2022 走看看