如何手工搭建ABP框架Web項(xiàng)目-創(chuàng)新互聯(lián)

本篇文章為大家展示了如何手工搭建ABP框架Web項(xiàng)目,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

站在用戶(hù)的角度思考問(wèn)題,與客戶(hù)深入溝通,找到崇明網(wǎng)站設(shè)計(jì)與崇明網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶(hù)體驗(yàn)好的作品,建站類(lèi)型包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、空間域名、網(wǎng)頁(yè)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋崇明地區(qū)。

ABP是 ASP.NET Boilerplate Project 的簡(jiǎn)稱(chēng)。ABP是基于DDD(領(lǐng)域驅(qū)動(dòng)設(shè)計(jì))的框架。ABP包含眾多組件,包括依賴(lài)注入、動(dòng)態(tài)API、審計(jì)日志、權(quán)限控制等等。在大部分的ABP教材中,會(huì)推薦使用模板(https://aspnetboilerplate.com/Templates)來(lái)創(chuàng)建ABP工程。然而在實(shí)際使用中(至少在我的情況里)一般都需要手工搭建框架而非使用模板。手工搭建有下面幾個(gè)好處:

  1. 模板創(chuàng)建的工程有很多不需要的東西需要調(diào)整或刪除,手工搭建免去了這些麻煩;

  2. 手工搭建框架能更自由地根據(jù)實(shí)際需求進(jìn)行自定義配置和擴(kuò)展;

  3. 手工搭建能幫助你更深入地理解ABP框架。

由于手工搭建ABP框架材料較少,我搭建時(shí)踩了不少坑。所以在這里記錄一下搭建框架的核心步驟,以免以后重新摸索。下面我們以開(kāi)發(fā)一個(gè)簡(jiǎn)單的微博應(yīng)用為例來(lái)展示如何使用ABP框架。

新建VS項(xiàng)目

用VS新建Web MVC項(xiàng)目,項(xiàng)目名稱(chēng)為MyTweet.Web。同時(shí)新建解決方案,解決方案名稱(chēng)為MyTweet。要注意的一點(diǎn)是ABP只支持.NET 4.6以上版本,所以新建項(xiàng)目時(shí)記得選.NET Framework 4.6以上的版本。

接下來(lái),我們遵循DDD的原則,新建以下幾個(gè)層次的項(xiàng)目:

  1. 展現(xiàn)層(Presentation),負(fù)責(zé)長(zhǎng)沙網(wǎng)站建設(shè)用戶(hù)界面與用戶(hù)交互。在我們這個(gè)應(yīng)用中,展現(xiàn)層是.NET MVC,包括Controller以及前端代碼,實(shí)現(xiàn)在項(xiàng)目MyTweet.Web中。

  2. 應(yīng)用層(Application),負(fù)責(zé)展現(xiàn)層與領(lǐng)域?qū)又g的協(xié)調(diào)。實(shí)現(xiàn)在項(xiàng)目MyTweet.Application中。

  3. 領(lǐng)域?qū)樱―omain),負(fù)責(zé)業(yè)務(wù)對(duì)象與業(yè)務(wù)邏輯。實(shí)現(xiàn)在項(xiàng)目MyTweet.Domain中。

  4. 基礎(chǔ)設(shè)施層(Infrastructure),提供一些通用的方法。實(shí)現(xiàn)在項(xiàng)目MyTweet.Infrastructure中。

新建好項(xiàng)目后,還需要設(shè)置引用依賴(lài)關(guān)系。在此不再贅述。

安裝ABP相關(guān)的NuGet包

安裝Abp包到所有項(xiàng)目。

安裝Abp.Web.Mvc和Abp.Web.Api到MyTweet.Web。

創(chuàng)建模塊

ABP提供了模塊系統(tǒng)。使用模塊能方便地管理各個(gè)組件的初始化與依賴(lài)關(guān)系。一般來(lái)說(shuō),每個(gè)項(xiàng)目都會(huì)建一個(gè)模塊。由于本篇只用到了MyTweet.Web和MyTweet.Application,所以先只新建這兩個(gè)模塊。

在MyTweet.Application目錄下新建類(lèi)MyTweetApplicationModule,并繼承自AbpModule。

模塊中的Initialize方法定義了模塊初始化時(shí)執(zhí)行的操作。目前只做了IoC依賴(lài)注入的操作。

另外,在MyTweet.Web/App_Start目錄下新建類(lèi)MyTweetWebModule,同樣也需要繼承自AbpModule,并且,這個(gè)模塊還需要依賴(lài)AbpWebApiModule(WebAPI需要這個(gè)模塊),MyTweetApplicationModule。

最后,為了讓程序運(yùn)行時(shí)能識(shí)別并執(zhí)行模塊,需要修改入口方法。.NET MVC的入口方法在Global.asax.cs文件中,如下圖,MvcApplication修改為繼承AbpWebApplication<MyTweetWebModule>,并相應(yīng)地修改Application_Start方法。

WebAPI

我們使用WebAPI的方式定義前后端交互的接口。當(dāng)然,直接使用MVC的方法也是可以的。這里只是單純?yōu)榱嗽囉肁BP動(dòng)態(tài)WebAPI的用法而使用的WebAPI。

我們將實(shí)現(xiàn)兩個(gè)接口:

  1. GetTweets接口,GET方法,用于查詢(xún)出所有微博。

  2. CreateTweet接口,POST方法,用于新增一條微博。

因?yàn)槲覀冞€沒(méi)實(shí)現(xiàn)數(shù)據(jù)庫(kù)訪問(wèn)功能,所以現(xiàn)在還不會(huì)真正實(shí)現(xiàn)這兩個(gè)接口,這兩個(gè)接口現(xiàn)在只讓它們返回一些測(cè)試數(shù)據(jù)。

在ABP框架下實(shí)現(xiàn)WebAPI十分方便,ABP能夠使用反射的方法自動(dòng)從應(yīng)用層AppService的public方法生成WebAPI接口。只需在MyTweetModule的初始化方法添加代碼定義動(dòng)態(tài)ApiController生成規(guī)則。

這些代碼會(huì)在MyTweetApplicationModule的程序集中,將所有IApplicationService的實(shí)現(xiàn)類(lèi)動(dòng)態(tài)生成ApiController,并且根據(jù)方法名對(duì)public方法綁定相應(yīng)的HTTP Method動(dòng)詞。
比如,GetTweets綁定為GET方法,PutTweet綁定為PUT方法,其他名稱(chēng)的方法像CreateTweet綁定為POST方法。
(這里有一個(gè)例外,Get開(kāi)頭的方法如果參數(shù)是一個(gè)object——一個(gè)DTO的話,那這個(gè)方法會(huì)被綁定為POST方法。)
生成的WebAPI接口的訪問(wèn)路徑為/api/services/MyTweet/{AppSvcName}/{ActionName},其中{AppSvcName}是IApplicationService實(shí)現(xiàn)類(lèi)的類(lèi)名(去掉后綴AppService),{ActionName}是方法名。

接下來(lái)我們實(shí)現(xiàn)GetTweets和CreateTweet兩個(gè)接口

現(xiàn)在只是簡(jiǎn)單的讓這兩個(gè)接口隨便返回一些結(jié)果。GetTweets是接收一個(gè)字符串參數(shù)的GET接口,CreateTweet是接收一個(gè)字符串s、一個(gè)整數(shù)s的POST接口(C#與JavaScript對(duì)大小寫(xiě)的編碼規(guī)范不同是一件很煩人的事,幸好ABP框架做了自動(dòng)轉(zhuǎn)換)。這兩個(gè)接口的路徑分別為/api/services/MyTweet/MyTweet/GetTweets和/api/services/MyTweet/MyTweet/CreateTweet。

最后測(cè)試一下,運(yùn)行MyTweet.Web項(xiàng)目,GET接口直接在瀏覽器就能訪問(wèn)。

POST接口可以用Postman工具來(lái)訪問(wèn)

大功告成!

你訪問(wèn)API的時(shí)候可能會(huì)出現(xiàn)"Empty or invalid anti forgery header token"的錯(cuò)誤,這是因?yàn)槟承〢BP版本默認(rèn)開(kāi)啟了CSRF防御。在MyTweetWebModule的PreInitialize方法加上下面這行代碼關(guān)閉CSRF防御就可以了。

Configuration.Modules.AbpWeb().AntiForgery.IsEnabled = false;

Abp Module

最后簡(jiǎn)要介紹下ABP的模塊系統(tǒng)。更詳細(xì)的講解可查閱官網(wǎng)的文檔https://aspnetboilerplate.com/Pages/Documents/Module-System。

模塊主要用來(lái)管理系統(tǒng)初始化和關(guān)閉時(shí)要執(zhí)行的操作。ABP在系統(tǒng)初始化和關(guān)閉時(shí)根據(jù)模塊間依賴(lài)關(guān)系執(zhí)行相應(yīng)的操作。

定義一個(gè)模塊只需要繼承AbpModule。我們可以用DependsOn標(biāo)簽來(lái)聲明模塊間的依賴(lài)關(guān)系(ABP框架會(huì)自動(dòng)解析依賴(lài)關(guān)系,但建議使用顯式的聲明)。

一個(gè)模塊會(huì)有如下方法,我們可以重載這些方法來(lái)定義模塊初始化/關(guān)閉時(shí)要做的操作:

  • PreInitialize:預(yù)初始化

  • Initialize:初始化

  • PostInitialize:后初始化

  • Shutdown:關(guān)閉

應(yīng)用啟動(dòng)時(shí)會(huì)根據(jù)模塊的依賴(lài)順序進(jìn)行初始化。比如有模塊A和模塊B,模塊A依賴(lài)模塊B,那么初始化的執(zhí)行順序?yàn)椋?/p>

  1. B的PreInitialize

  2. A的PreInitialize

  3. B的Initialize

  4. A的Initialize

  5. B的PostInitialize

  6. A的PostInitialize

關(guān)閉則按照依賴(lài)相反順序:

  1. A的Shutdown

  2. B的Shutdown

ABP框架解析MyTweetModule所依賴(lài)的模塊,按順序初始化這些模塊(包括MyTweetModule)。

上述內(nèi)容就是如何手工搭建ABP框架Web項(xiàng)目,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道。

標(biāo)題名稱(chēng):如何手工搭建ABP框架Web項(xiàng)目-創(chuàng)新互聯(lián)
轉(zhuǎn)載來(lái)源:http://muchs.cn/article26/dphijg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、全網(wǎng)營(yíng)銷(xiāo)推廣、標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司