91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何手工搭建ABP框架Web項目

發布時間:2021-12-13 10:49:23 來源:億速云 閱讀:327 作者:柒染 欄目:互聯網科技

本篇文章為大家展示了如何手工搭建ABP框架Web項目,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

ABP是 ASP.NET Boilerplate Project 的簡稱。ABP是基于DDD(領域驅動設計)的框架。ABP包含眾多組件,包括依賴注入、動態API、審計日志、權限控制等等。在大部分的ABP教材中,會推薦使用模板(https://aspnetboilerplate.com/Templates)來創建ABP工程。然而在實際使用中(至少在我的情況里)一般都需要手工搭建框架而非使用模板。手工搭建有下面幾個好處:

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

  2. 手工搭建框架能更自由地根據實際需求進行自定義配置和擴展;

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

由于手工搭建ABP框架材料較少,我搭建時踩了不少坑。所以在這里記錄一下搭建框架的核心步驟,以免以后重新摸索。下面我們以開發一個簡單的微博應用為例來展示如何使用ABP框架。

新建VS項目

用VS新建Web MVC項目,項目名稱為MyTweet.Web。同時新建解決方案,解決方案名稱為MyTweet。要注意的一點是ABP只支持.NET 4.6以上版本,所以新建項目時記得選.NET Framework 4.6以上的版本


接下來,我們遵循DDD的原則,新建以下幾個層次的項目:

  1. 展現層(Presentation),負責長沙網站建設用戶界面與用戶交互。在我們這個應用中,展現層是.NET MVC,包括Controller以及前端代碼,實現在項目MyTweet.Web中。

  2. 應用層(Application),負責展現層與領域層之間的協調。實現在項目MyTweet.Application中。

  3. 領域層(Domain),負責業務對象與業務邏輯。實現在項目MyTweet.Domain中。

  4. 基礎設施層(Infrastructure),提供一些通用的方法。實現在項目MyTweet.Infrastructure中。

新建好項目后,還需要設置引用依賴關系。在此不再贅述。

安裝ABP相關的NuGet包

安裝Abp包到所有項目。

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

創建模塊

ABP提供了模塊系統。使用模塊能方便地管理各個組件的初始化與依賴關系。一般來說,每個項目都會建一個模塊。由于本篇只用到了MyTweet.Web和MyTweet.Application,所以先只新建這兩個模塊。

在MyTweet.Application目錄下新建類MyTweetApplicationModule,并繼承自AbpModule。

模塊中的Initialize方法定義了模塊初始化時執行的操作。目前只做了IoC依賴注入的操作。

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

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

WebAPI

我們使用WebAPI的方式定義前后端交互的接口。當然,直接使用MVC的方法也是可以的。這里只是單純為了試用ABP動態WebAPI的用法而使用的WebAPI。

我們將實現兩個接口:

  1. GetTweets接口,GET方法,用于查詢出所有微博。

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

因為我們還沒實現數據庫訪問功能,所以現在還不會真正實現這兩個接口,這兩個接口現在只讓它們返回一些測試數據。

在ABP框架下實現WebAPI十分方便,ABP能夠使用反射的方法自動從應用層AppService的public方法生成WebAPI接口。只需在MyTweetModule的初始化方法添加代碼定義動態ApiController生成規則。

這些代碼會在MyTweetApplicationModule的程序集中,將所有IApplicationService的實現類動態生成ApiController,并且根據方法名對public方法綁定相應的HTTP Method動詞。
比如,GetTweets綁定為GET方法,PutTweet綁定為PUT方法,其他名稱的方法像CreateTweet綁定為POST方法。
(這里有一個例外,Get開頭的方法如果參數是一個object——一個DTO的話,那這個方法會被綁定為POST方法。)
生成的WebAPI接口的訪問路徑為/api/services/MyTweet/{AppSvcName}/{ActionName},其中{AppSvcName}是IApplicationService實現類的類名(去掉后綴AppService),{ActionName}是方法名。

接下來我們實現GetTweets和CreateTweet兩個接口

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

最后測試一下,運行MyTweet.Web項目,GET接口直接在瀏覽器就能訪問。

POST接口可以用Postman工具來訪問

大功告成!

你訪問API的時候可能會出現"Empty or invalid anti forgery header token"的錯誤,這是因為某些ABP版本默認開啟了CSRF防御。在MyTweetWebModule的PreInitialize方法加上下面這行代碼關閉CSRF防御就可以了。

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

Abp Module

最后簡要介紹下ABP的模塊系統。更詳細的講解可查閱官網的文檔https://aspnetboilerplate.com/Pages/Documents/Module-System。

模塊主要用來管理系統初始化和關閉時要執行的操作。ABP在系統初始化和關閉時根據模塊間依賴關系執行相應的操作。

定義一個模塊只需要繼承AbpModule。我們可以用DependsOn標簽來聲明模塊間的依賴關系(ABP框架會自動解析依賴關系,但建議使用顯式的聲明)。

一個模塊會有如下方法,我們可以重載這些方法來定義模塊初始化/關閉時要做的操作:

  • PreInitialize:預初始化

  • Initialize:初始化

  • PostInitialize:后初始化

  • Shutdown:關閉

應用啟動時會根據模塊的依賴順序進行初始化。比如有模塊A和模塊B,模塊A依賴模塊B,那么初始化的執行順序為:

  1. B的PreInitialize

  2. A的PreInitialize

  3. B的Initialize

  4. A的Initialize

  5. B的PostInitialize

  6. A的PostInitialize

關閉則按照依賴相反順序:

  1. A的Shutdown

  2. B的Shutdown

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

上述內容就是如何手工搭建ABP框架Web項目,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昆山市| 井研县| 汉川市| 阿勒泰市| 翼城县| 丹江口市| 手机| 深圳市| 淅川县| 海宁市| 如皋市| 伊通| 菏泽市| 西峡县| 清徐县| 柞水县| 佛山市| 金平| 英山县| 芒康县| 灵璧县| 祥云县| 喀喇沁旗| 安乡县| 余庆县| 呼图壁县| 沧州市| 大同市| 酉阳| 迁安市| 顺义区| 河间市| 泾川县| 临湘市| 双城市| 德惠市| 民勤县| 广宁县| 新平| 偃师市| 和硕县|