在ASP.NET MVC項目中,一般都要使用身份驗證和權限控制,但總有部分網頁是可以匿名訪問的。使用AllowAnonymous屬性就可以指定需要匿名訪問的控制器,從而跳過身份驗證。
但是今天卻遇到一個AllowAnonymous屬性失效的問題,導致聲明了該屬性控制器的操作方法無法匿名訪問,需要登陸后才可訪問。后經過排查,是由於配置文件屬性設置的問題。
一般是這樣聲明這個屬性的:
[AllowAnonymous]
public ActionResult Index() { return View(); }
聲明了允許匿名訪問后,用戶訪問該控制器下的Index操作方法時,就無需進行身份驗證了
(PS:匿名屬性啟用的前提是網站啟用了form身份驗證)。
但是如果有發現聲明了該屬性后,卻無法訪問屬性設置下的Action操作方法,反而跳轉到身份驗證的登陸頁面。這個時候可以按下面步驟排除問題:
- 首先檢查下網站的應用程序文件Global.asax是否有做過身份驗證和跳轉操作,要注意每個事件里所做的特殊處理
- 如果Global.asax沒有做任何處理的話,那么接下來檢測控制器的構造函數是否有做過身份驗證和跳轉處理,控制器所繼承的類是不是有做過相關處理。
- 最后就是檢查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
歡迎轉載本文,本文版權歸作者所有,轉載請聲明出處或保留此段聲明。^_^請尊重他人勞動成果,共建美好的網絡環境。