前言 上一篇文章介紹了ABP的Web API,本文在繼續介紹ABP的其他內容。 在ABP中,WEBAPI是一個值得用的東西。但其他東西,就不一定是那麼好用了。 因為越深入的學習ABP,你就越會發現,它自身有著非常強的設計約束,而而微軟的框架已經有一定的約束了,再使用一套附加約束,顯然會更辛苦。 下麵 ...
前言
上一篇文章介紹了ABP的Web API,本文在繼續介紹ABP的其他內容。
在ABP中,WEBAPI是一個值得用的東西。但其他東西,就不一定是那麼好用了。
因為越深入的學習ABP,你就越會發現,它自身有著非常強的設計約束,而而微軟的框架已經有一定的約束了,再使用一套附加約束,顯然會更辛苦。
下麵我們看一下ABP的Controller。
創建項目
使用了ABP後,必須修改WebApiApplication的繼承類,所以,原來的初始化的路由等等信息,要換個
將WebApiApplication改為繼承Abp.Web.AbpWebApplication;Global.asax修改如下:
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
----------------------------------------------------------------------------------------------------
註:此文章為原創,任何形式的轉載都請聯繫作者獲得授權並註明出處!
若您覺得這篇文章還不錯,請點擊下方的【推薦】,非常感謝!
https://www.cnblogs.com/kiba/p/12651512.html