【經驗分享】ASP.NET 的 Page_Load 執行了2次,真的(啓用了表單驗證Form Authentication)!

發現問題

這是來自一位網友的提問:html

 

本着求真務實的態度,我打開了 AppBoxPro 項目,本地調試果真發現 Page_Load 進入了兩次!web

其實在沒測試以前,我就有了大概的方向,由於AppBoxPro是須要先登陸的,莫非由於權限問題被重定向了一次,可是F12打開調試窗口,發現請求的的確確只有一個:瀏覽器

 

分析問題

以前好像也遇到過相似的問題,貌似是圖片標籤設了空的src屬性致使的( <img src="">),網上查了一下,的確有不少人遇到這個問題。工具

好比這個帖子:https://www.cnblogs.com/Simcoder/archive/2011/12/01/2270256.html測試

可是我在頁面上檢查了一遍,雖然有 img 標籤,可是其 src 屬性都不爲空!網站

 

沒辦法,仍是調試看看參數吧,畢竟兩次進入 Page_Load 總該有所不一樣吧,來看下請求的URL:spa

 

 

 

 

果真發現問題,解碼後第二次的請求URL是:http://localhost:7086/default.aspx?ReturnUrl=/__browserLink/requestData/e176fc91b6574240afa3a4f0f95e9ebd?version=2&version=23d

 

看到其中的 __browserLink 我好像忽然明白了,這個不就是 Visual Studio 提供的一個工具嘛,好像是 VS2013 以後才引入的,可讓用戶在VS中點擊刷新按鈕直接刷新相應的瀏覽器窗口,不過我對這玩意不感冒,歷來不用過罷了。調試

 

打開頁面源代碼,就能看到這個請求來自何處了:code

 

解決問題

知道問題的根源,解決起來就很簡單了,這裏有兩個方法。

第一種方法簡單粗暴,直接禁用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 請求了。

 

至此,問題完美解決。

 

 

不忘初心,砥礪前行!

相關文章
相關標籤/搜索