推薦:解析.NET Framework 新功能和增強(qiáng)的功能ASP.NET 移動(dòng)控件(原來(lái)為 Microsoft Mobile Internet Toolkit)擴(kuò)展了 .NET Framework 和 Visual Studio .NET,提供了對(duì)移動(dòng)電話和個(gè)人數(shù)據(jù)助理 (PDA) 等移動(dòng)(無(wú)線)設(shè)備的支持。.NET Framew
在ASP.NET MVC中,如何來(lái)實(shí)現(xiàn)表單的驗(yàn)證與授權(quán)訪問(wèn)呢?至少在CTP3中,還沒(méi)有一個(gè)官方的解決方案。ASP.NET WebForm的表單驗(yàn)證和授權(quán)機(jī)制是否適合在ASP.NET MVC中使用呢?帶著這些問(wèn)題來(lái)進(jìn)入我們今天的主題。
在ASP.NET WebForm的架構(gòu)下,我們可以通過(guò)一定的配置即可實(shí)現(xiàn)用戶身份驗(yàn)證和授權(quán)。特別是在ASP.NET 2.0的Membership功能的支撐下,可以做到更加簡(jiǎn)潔可復(fù)用的用戶驗(yàn)證系統(tǒng)。通過(guò)web.config可以做到對(duì)頁(yè)面或目錄對(duì)不同用戶身份可見(jiàn)性的定制,但是它是基于物理文件和目錄。而在ASP.NET MVC架構(gòu)下,用戶訪問(wèn)的每一個(gè)頁(yè)面在磁盤(pán)中并沒(méi)有一個(gè)固定的物理文件,它是通過(guò)Controller控制數(shù)據(jù)與視圖的組合來(lái)生成HTML代碼,進(jìn)而向客戶端輸出。那么我們?cè)撊绾蝸?lái)復(fù)用已有的表單驗(yàn)證授權(quán)機(jī)制呢?
在MVC中,請(qǐng)求的功能入口是Controller相應(yīng)的Action函數(shù),我們可以在函數(shù)執(zhí)行前去控制請(qǐng)求權(quán)限。在ASP.NET MVC Preview 2后,提供了一個(gè)機(jī)制讓我們可以對(duì)Action的AOP攔截,這個(gè)接口定義如下: public interface IActionFilter
| 以下為引用的內(nèi)容: { void OnActionExecuted(ActionExecutedContext filterContext); void OnActionExecuting(ActionExecutingContext filterContext); void OnResultExecuted(ResultExecutedContext filterContext); void OnResultExecuting(ResultExecutingContext filterContext); } |
我們有兩種方式來(lái)實(shí)現(xiàn)攔截,一種我們可以通過(guò)定義Attribute來(lái)實(shí)現(xiàn)攔截的功能,在System.Web.Mvc程序集中有一個(gè)ActionFilterAttribute抽象類(lèi),通過(guò)重寫(xiě)這個(gè)抽象類(lèi)的這些虛方法,我們就可以實(shí)現(xiàn)對(duì)特定的執(zhí)行過(guò)程進(jìn)行攔截。
另一種方法,我們注意到Controller這個(gè)類(lèi)也實(shí)現(xiàn)了IActionFilter這個(gè)接口,并且也提供了這四個(gè)函數(shù)的虛擬方法定義。框架內(nèi)部,在調(diào)用Action方法的時(shí)候同時(shí)來(lái)調(diào)用這些攔截方法。具體的可以參考:ControllerActionInvoker 這個(gè)類(lèi)的實(shí)現(xiàn),所有的Action的調(diào)用都在這個(gè)類(lèi)當(dāng)中被實(shí)現(xiàn)。所以我們只要重寫(xiě)Controller里這四個(gè)虛方法,也可完成本Controller面的所有Action的攔截。
在這里,我也找到了國(guó)外友人已經(jīng)實(shí)現(xiàn)好的基于角色的MVC權(quán)限控制的方案。
分享:.NET教程之ASP.NET緩存方法分析和實(shí)踐示例盡早緩存;經(jīng)常緩存 您應(yīng)該在應(yīng)用程序的每一層都實(shí)現(xiàn)緩存。向數(shù)據(jù)層、業(yè)務(wù)邏輯層、UI 或輸出層添加緩存支持。內(nèi)存現(xiàn)在非常便宜 ― 因此,通過(guò)以智能的方式在整個(gè)應(yīng)用程序中實(shí)現(xiàn)緩存,
新聞熱點(diǎn)
疑難解答
圖片精選