前言html
上一篇文章介紹了ABP的Web API,本文在繼續介紹ABP的其餘內容。git
在ABP中,WEBAPI是一個值得用的東西。但其餘東西,就不必定是那麼好用了。github
由於越深刻的學習ABP,你就越會發現,它自身有着很是強的設計約束,而而微軟的框架已經有必定的約束了,再使用一套附加約束,顯然會更辛苦。app
下面咱們看一下ABP的Controller。框架
建立項目ide
函數
學習
使用了ABP後,必須修改WebApiApplication的繼承類,因此,原來的初始化的路由等等信息,要換個測試
將WebApiApplication改成繼承Abp.Web.AbpWebApplication;Global.asax修改以下:ui
using Abp.Web; using AbpMvcController; using System; using System.Web; [assembly: PreApplicationStartMethod(typeof(PreStarter), "Start")] namespace AbpMvcController { public class WebApiApplication : Abp.Web.AbpWebApplication<StartServiceModule> { protected override void Application_Start(object sender, EventArgs e) { base.Application_Start(sender, e); } } public static class PreStarter { public static void Start() { WebApiApplication.AbpBootstrapper.PlugInSources.AddToBuildManager(); } } }
而後在App_Start文件夾新建StartModule,StartModule繼承 AbpModule。
而後把在Global.asa中刪除路由註冊等信息,在StartModule中,重寫出來。
PS:由於建立的是MVC項目,因此咱們添加相應的依賴——[DependsOn(typeof(Abp.Web.AbpWebModule),typeof(AbpWebMvcModule))]。
代碼以下:
[DependsOn(typeof(Abp.Web.AbpWebModule),typeof(AbpWebMvcModule))] public class StartModule : AbpModule { public override void PreInitialize() { Configuration.Modules.AbpWeb().AntiForgery.IsEnabled = false; Configuration.Modules.AbpWebCommon().SendAllExceptionsToClients = true; } public override void Initialize() { IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly()); AreaRegistration.RegisterAllAreas(); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); } public override void PostInitialize() { GlobalConfiguration.Configuration.Filters.Add(new ExceptionFilter()); } public override void Shutdown() { } }
如今咱們嘗試運行項目,結果項目成功啓動,以下圖。
即,咱們雖然修改了WebApiApplication的繼承類,但依然能夠正常訪問建立項目時,自動生成的Controller。
也就是說,ABP並無改變MVC的邏輯。
AbpController
ABP中提供了一個AbpController,它至關於對對MVC的Controller的擴展。
如今,咱們找到HomeController,修改它的繼承,而後運行項目。
項目正常運行。
----------------------------------------------------------------------------------------------------
如今咱們編寫一個AuthorizeAttribute,而後放到這個繼承AbpController的Controller上;代碼以下:
[CustomAuthorize] public class HomeController : AbpController { public ActionResult Index() { ViewBag.Title = "Home Page"; return View(); } }
而後咱們斷點CustomAuthorizeAttribute的AuthorizeCore函數。
測試結構發現,斷點能夠被命中。
即,MVC的受權特性還能夠正常使用。
----------------------------------------------------------------------------------------------------
ABP也提供了一個受權特性——AbpMvcAuthorize;很好理解,它是AuthorizeAttribute的一個擴展,和上面的AbpController同樣。
結語
整體上來講,ABP框架對微軟的WebApi作出了很好的封裝,提供了比較高級的擴展,即,動態建立WebApi,它切實的簡化了代碼。
但,對Controller,它並無提供過高級的功能,就是一些簡單的擴展和再封裝。
那麼,如要使用ABP來開發MVC,就須要在學習微軟MVC的基礎上,再去學習ABP的方言了。
說實話,這樣作有點累;因此,開發項目時,使用微軟的MVC結構便可,由於網上有豐富的資源可用。
關於ABP的其餘功能:
ABP的日誌:ABP的日誌由於沒辦法擴展到沒引用ABP的類庫裏,而引用ABP又要引用一堆類庫;因此,全系統使用ABP的日誌幾乎是不可能的,即,它意義不大,仍是本身封裝日誌比較好。
ABP提供的EF:ABP提供的EF因其使用和配置太過繁瑣,支持的功能又不是特別全面;且設計理念上,只有部分DDD的思想,而後,它還很難擴展;因此,基本上能夠拋棄了,由於根本無法和業務作最完美的結合。事實上,隨便找的開源的EF再封裝框架都比ABP的好理解,好調用。
----------------------------------------------------------------------------------------------------
代碼已經傳到Github上了,歡迎你們下載。
Github地址:https://github.com/kiba518/AbpMvcController
----------------------------------------------------------------------------------------------------
注:此文章爲原創,任何形式的轉載都請聯繫做者得到受權並註明出處!
若您以爲這篇文章還不錯,請點擊下方的【推薦】,很是感謝!
http://www.javashuo.com/article/p-mgfjlkpf-dm.html