ASP.NET中HTML頁面的訪問驗證設定方法_實用技巧

來源:互聯網
上載者:User

可能有很多朋友和我一樣不會留意到這樣的問題,在ASP.NET中,使用其自身提供的訪問驗證功能(表單驗證、Passport 驗證、Windows 驗證),並不會對靜態檔案(如 html、影像檔、文字檔等)進行訪問限制,即使這些檔案置於需要驗證後才能訪問的檔案夾下,匿名使用者仍然可以訪問到這些檔案。這是因為靜態檔案預設是由 IIS 處理,IIS 在接收到對這些檔案的請求後,並不會轉交給 ASP.NET 處理,所以,在 ASP.NET 中的許可權驗證失去了作用。換句話說,這些檔案不在ASP.NET 的管轄範圍內。

那麼,如何將這些檔案置於 ASP.NET 的管轄範圍內呢?以 html 檔案為例,最簡單的辦法是將 html 檔案的尾碼改為 aspx,這個辦法很簡單,也算實用,但並不正規。另一種方法是針對 IIS 進行設定,讓 IIS 將 html 檔案的處理權轉交給 ASP.NET。設定如下:

(1) 開啟 IIS,找到需要設定的 ASP.NET 應用程式,開啟屬性對話方塊。

(2) 在“虛擬目錄”選項卡中有一個“應用程式設定”,點擊這裡面的“設定”按鈕,彈出新的對話方塊。

(3) 在“對應”選項卡中,點擊“新增”按鈕,增加 .htm 的尾碼與處理常式的對應關係,具體設定可參照 .aspx 的設定。

設定好之後,再次訪問位於需要驗證的目錄下的 html 檔案,會轉到登入頁面提示使用者登入,說明訪問驗證已經生效。但到此仍未完成,因為登入後會發現,htm 檔案錯誤。這涉及到 HttpHandler 的問題,因為對於 ASP.NET 來說,這相當於啟用了一種新的檔案類型,但卻沒有相應的處理常式。所以,還需要改動 web.config 的設定,註冊一個新的處理常式,對於 html 檔案,我們可以使用 aspx 檔案的處理常式,所以設定如下:

<system.web>...<httpHandlers>...<!-- 增加尾碼為 htm 檔案的處理常式,這裡使用 aspx 檔案的處理常式 --><add verb="*" path="*.htm" type="System.Web.UI.PageHandlerFactory"/></httpHandlers>...</system.web>

再次訪問,這次是編譯錯誤,因為缺少對 htm 檔案的相應編譯器,再修改web.config:

<system.web><compilation>...<!-- 設定尾碼為 htm 的檔案的編譯器,這裡使用 aspx 檔案的編譯器 --><buildPRoviders><add extension=".htm" type="System.Web.Compilation.PageBuildProvider"/></buildProviders></compilation>...</system.web>

這回再訪問這個 html 檔案,它正如我們期望的一樣,需要進行身分識別驗證,並且也能夠正常顯示。其實這個問題的核心在於對 HttpHandler 的理解。另外,據說在 IIS7 中,只要把應用程式放在模式為Integrated 的應用程式集區中,就可以解決這個問題。

如果不是特殊要求或者非要使用HTML靜態頁面時,個人覺得還是把html轉換成aspx比較簡單。客戶部署不需要作過多的配置,有些客戶就很煩部署系統要作配置,所以還是簡單為好。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.