我是新的.NET和MVC3,我目前正在將長期經典ASP站點轉換爲MVC3應用程序站點。MVC3 <authentication>和<authorization>裏面的<location>屬性
同一站點有四個區域,我需要唯一的登錄頁面和離散級別的訪問和安全性。這意味着我不想使用默認的代碼在我的web.config文件:
<authentication mode="Forms">
<forms loginUrl="~/Account/Logon" timeout="2880" />
</authentication>
相反,我希望能夠建立我區應用程序內部,然後使用<location>
屬性設置爲每個認證和授權規則。因此,例如:
<location path="AreaName">
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/AreaName/Login" timeout="15" />
</authentication>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
如果我刪除這些三條線:
<authentication mode="Forms">
<forms loginUrl="~/AreaName/Login" timeout="15" />
</authentication>
然後,當我嘗試在路徑訪問任何的意見「AREANAME」我先被重定向到〜/帳戶/登錄。如果我把那些三線回來,我得到以下錯誤:
Parser Error Message: It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.
我已搜查反對這個錯誤,沒有任何提出的建議似乎適用。我已經看到了一個應該將邏輯放在控制器上而不是在web配置中的答案,但這些方法仍然意味着您要爲整個站點使用默認的<authentication>
。
我不明白爲什麼我不能在<location>
內有<authentication>
屬性。任何對此的幫助將不勝感激。
如果我錯誤地回答了這個問題,我很抱歉。
看起來這是因爲在ASP.NET框架的Machine.config文件中,爲認證部分設置了'allowDefinition =「MachineToApplication」'的設置。所以我想我的問題變成了,有沒有辦法在machine.config中重寫該設置,並將其設置爲在我的應用程序web.config文件中聲明'allowDefinition =「Everywhere」'? – Peter 2012-04-04 15:46:59