2015-10-19 74 views
0

我有一個網頁(home.aspx)需要Windows身份驗證。如果瀏覽器自動發送有效憑證,則會顯示home.aspx。否則,將顯示login.aspx。ASP.NET。自定義頁面上401

在IE中,我已選中Internet選項>本地內聯網>自定義級別>用戶認證中的「提示輸入用戶名和密碼」複選框。 我遵循http://www.codeproject.com/Articles/11202/Redirecting-to-custom-page-when-quot-Access-de中的步驟,它在我的本地開發服務器上工作正常。但是,在生產服務器上,這是一個不同的故事。

在IIS中,Home.aspx已禁用匿名身份驗證,並啓用了Windows身份驗證。 Login.aspx啓用了匿名身份驗證並禁用了Windows身份驗證。

在開發服務器上,在使用正確憑證登錄的計算機上顯示home.aspx。而且,當瀏覽器沒有發送憑證時,Application_EndRequest將以401狀態碼命中,然後默認的Windows身份驗證提示將顯示enter image description here。 取消此對話框後,顯示login.aspx。這是正確的行爲。

但是,在生產服務器上,使用正確憑證登錄的計算機上顯示home.aspx。而且,當瀏覽器沒有發送證書時,Application_EndRequest被命中401狀態碼,然後顯示默認的Windows身份驗證提示。取消該對話框後,將顯示默認的401頁面。 enter image description here

是否有人在生產服務器上發生了什麼,以及爲什麼我無法攔截401狀態碼並重定向到自定義網頁。

+0

我沒有示例代碼在我面前作爲示例發佈,但聽起來像您需要允許從web.config或安全設置中匿名訪問login.aspx。否則,如果沒有有效的證書,IIS將不會提供它。 – GalacticCowboy

+0

感謝您的回覆。我啓用了對login.aspx的匿名訪問,並禁用了Windows身份驗證,但仍然遇到同樣的問題。 – user2769810

回答

0

在IIS 7中,他們在web.config中添加了一個屬性,用於控制自定義錯誤的行爲。默認情況下,自定義和詳細錯誤只顯示在本地瀏覽器上。要顯示您的自定義錯誤,您需要在web.config <httpErrors>元素中更改此屬性,errorMode屬性。

<configuration> 
    <system.webServer> 
     <httpErrors errorMode="DetailedLocalOnly" defaultResponseMode="File" > 
     <remove statusCode="500" /> 
     <error statusCode="500" 
      prefixLanguageFilePath="C:\Contoso\Content\errors" 
      path="500.htm" /> 
     </httpErrors> 
    </system.webServer> 
</configuration> 

DetailedLocalOnly是默認值;其他可能的值是DetailedCustom

欲瞭解更多信息,請點擊這裏Microsoft article來討論這種配置。

Aside:您鏈接的文章已超過10年,因此對於「現代」開發頗爲懷疑。其中一篇關於5年後發佈的文章的評論指出了同樣的問題和解決方案。

+0

我已經將errorMode設置爲Detailed,現在它不會重定向到login.aspx。但是,它顯示home.aspx的空白頁面。當我在IE中查看源代碼時,這是整個內容:。這是關閉的JavaScript代碼沒有被打到。 – user2769810