簡體   English   中英

子文件夾中忽略ASP.NET web.config授權設置

[英]ASP.NET web.config authorization settings ignored in subfolders

我正在使用asp.net mvc 2和vs 2008。

我正在嘗試使用表單授權制作網站。 當我試圖限制訪問某些頁面時,我正在使用asp.net管理工具。 例如,我創建了規則,拒絕訪問整個網站的匿名用戶。 正如預期的那樣,管理工具在根web.config文件中添加了以下部分:

 <authorization>
   <deny users="?" />
  </authorization>

當我在某個子文件夾中執行相同的操作時,例如%ApplicationRoot%/ View / Protected,管理工具,如預期的那樣,在所提到的子文件夾中添加web.config文件,使用以下代碼:

 <configuration>
<system.web>      
    <authorization>
        <deny users="UserName" />
    </authorization>
</system.web>

theese文件之間的主要區別在於root web.config授權部分有一些效果(一般來說,它按計划工作 - 拒絕來自整個網站的所有未經身份驗證的用戶)。 但是子文件夾web.config授權部分根本沒有任何效果。 我發現然后添加到root配置文件,代碼如下

 <location path="Protected">
  <authorization>
    <deny users="UserName" />
   </authorization>
 </location>

做得很好 - 它按計划拒絕%UserName%訪問所有視圖,位於%ApplicationRoot%/ View / Protected Folder中。
這個行為與卡西尼和iis相似,我試過這兩個。

主要的問題是我需要善良的管理工具來完成工作,所以我要求任何有關問題的幫助 - 為什么當web.config位於子文件夾中時授權部分不起作用?

PS我試圖在子文件夾的web.config中的<authorization></authorization>之間放置錯誤的代碼:

  <authorization>
    asdfg
   </authorization>

沒有效果。 由於某些問題,整個部分可能會被忽略?

PPS同一文件中授權部分的錯誤代碼會導致錯誤

您的問題是您的應用程序不是傳統的ASP.NET Web窗體應用程序。 你想要做的是在Web Forms中完美運行,但在MVC中卻不行。

在MVC世界中,當瀏覽器請求頁面/ People / SmartList時,它不一定會從您的項目中顯示/People/SmartList.cshtml。 實際上,您的項目甚至根本沒有/ People /文件夾。 將由MVC引擎顯示的視圖(.cshtml文件)由路由確定。 當它訪問那些.cshtml文件時,MVC路由引擎不會查看你的web.config文件。 現在,您可以看到為什么您的web.conig文件被忽略。

但你仍然可以進行授權。 您應該使用[Authorize]屬性並將其應用於適當的控制器操作方法,甚至應用於整個控制器類,而不是使用web.config文件。

[Authorize(Users="UserName")]
public ActionResult ShowRestrictedData()
    ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM