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


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

但是今天卻遇到一個AllowAnonymous屬性失效的問題,導致聲明了該屬性控制器的操作方法無法匿名訪問,需要登陸后才可訪問。后經過排查,是由於配置文件屬性設置的問題。

一般是這樣聲明這個屬性的:

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

聲明了允許匿名訪問后,用戶訪問該控制器下的Index操作方法時,就無需進行身份驗證了

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

但是如果有發現聲明了該屬性后,卻無法訪問屬性設置下的Action操作方法,反而跳轉到身份驗證的登陸頁面。這個時候可以按下面步驟排除問題:

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

    將配置文件的此段配置刪除后,就可以正常的匿名訪問有聲明允許匿名訪問屬性的Action操作方法了。


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


作者:十有三

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM