解決ASP.NET MVC AllowAnonymous屬性無效致使沒法匿名訪問控制器的問題

在ASP.NET MVC項目中,通常都要使用身份驗證和權限控制,但總有部分網頁是能夠匿名訪問的。使用AllowAnonymous屬性就能夠指定須要匿名訪問的控制器,從而跳過身份驗證。網絡

可是今天卻遇到一個AllowAnonymous屬性失效的問題,致使聲明瞭該屬性控制器的操做方法沒法匿名訪問,須要登錄後纔可訪問。後通過排查,是因爲配置文件屬性設置的問題。函數

通常是這樣聲明這個屬性的:post

[AllowAnonymous]
public ActionResult Index() { return View(); }

聲明瞭容許匿名訪問後,用戶訪問該控制器下的Index操做方法時,就無需進行身份驗證了網站

(PS:匿名屬性啓用的前提是網站啓用了form身份驗證)。spa

可是若是有發現聲明瞭該屬性後,卻沒法訪問屬性設置下的Action操做方法,反而跳轉到身份驗證的登錄頁面。這個時候能夠按下面步驟排除問題:code

  1. 首先檢查下網站的應用程序文件Global.asax是否有作過身份驗證和跳轉操做,要注意每一個事件裏所作的特殊處理
  2. 若是Global.asax沒有作任何處理的話,那麼接下來檢測控制器的構造函數是否有作過身份驗證和跳轉處理,控制器所繼承的類是否是有作過相關處理。
  3. 最後就是檢查Web.config這個網站配置文件了。個人問題是由於在Web.config中,設置了authorization元素,而且設置deny users="?"(拒絕全部匿名用戶訪問)。因爲authorization的優先級大於AllowAnonymous屬性,因此程序先判斷deny user="?" 拒絕掉匿名用戶後,就會跳過Action操做方法中的全部身份驗證屬性,致使網站自動跳轉到身份驗證的登錄頁面。具體配置文件代碼:
    <authorization> <deny users="?" /> </authorization> 

    將配置文件的此段配置刪除後,就能夠正常的匿名訪問有聲明容許匿名訪問屬性的Action操做方法了。orm


另外要說的一點,若是在ASP.NET MVC中已經使用了form身份驗證,那麼最好不要在配置文件中設置authorization元素,身份驗證控制應該使用Authorize屬性和AllowAnonymous屬性。xml


做者:十有三繼承

出處:http://shiyousan.com/post/635406153786208233事件

歡迎轉載本文,本文版權歸做者全部,轉載請聲明出處或保留此段聲明。^_^請尊重他人勞動成果,共建美好的網絡環境。

相關文章
相關標籤/搜索