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

三生石上(FineUI控制元件)發表於2019-08-01

發現問題

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

 

本著求真務實的態度,我開啟了 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 請求了。

 

至此,問題完美解決。

 

 

不忘初心,砥礪前行!

 

相關文章