【Net】ABP框架學習之它並不那麼好用

来源:https://www.cnblogs.com/kiba/archive/2020/04/10/12651512.html
-Advertisement-
Play Games

前言 上一篇文章介紹了ABP的Web API,本文在繼續介紹ABP的其他內容。 在ABP中,WEBAPI是一個值得用的東西。但其他東西,就不一定是那麼好用了。 因為越深入的學習ABP,你就越會發現,它自身有著非常強的設計約束,而而微軟的框架已經有一定的約束了,再使用一套附加約束,顯然會更辛苦。 下麵 ...


前言

 上一篇文章介紹了ABP的Web API,本文在繼續介紹ABP的其他內容。

在ABP中,WEBAPI是一個值得用的東西。但其他東西,就不一定是那麼好用了。

因為越深入的學習ABP,你就越會發現,它自身有著非常強的設計約束,而而微軟的框架已經有一定的約束了,再使用一套附加約束,顯然會更辛苦。

下麵我們看一下ABP的Controller。

創建項目

首先,我們創建一個MVC項目,AbpMvcController。

然後引用Abp.Web.Mvc。

使用了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的好理解,好調用。

ABP的依賴註入:ABP的依賴註入也是依賴Castle,那就是說我們完全可以直接使用Castle,這樣,效果比用他封裝的好;如果項目可以使用Core框架開發,那直接使用Core的依賴註入就可以了,這個比ABP的強太多了。

----------------------------------------------------------------------------------------------------

代碼已經傳到Github上了,歡迎大家下載。

Github地址:https://github.com/kiba518/AbpMvcController

----------------------------------------------------------------------------------------------------

註:此文章為原創,任何形式的轉載都請聯繫作者獲得授權並註明出處!
若您覺得這篇文章還不錯,請點擊下方的推薦】,非常感謝!

https://www.cnblogs.com/kiba/p/12651512.html

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • angularjs環境中,下拉列表html代碼如下: 下拉列表的數據源結構大約如下: 現在,我們想在頁面的初始化或者一個用戶Click事件中,為這個下拉列表設置一個預設值。 方法如下: $scope.Trans_Type =1; //2,3,4,..... 當我們執行時,發現它並沒有得到預期的效果, ...
  • Tinymce版本,5.2.1 html: 取值或賦值, 方法1: 方法2: ...
  • 正在開會,突然線上站點線程數破千。然後一群人現場dump分析。 先看一眼線程運行狀態 !eeversion 發現CPU占用並不高,19%,937條線程正在運行。 看看他們都在乾什麼。 ~* e !clrstack 發現大片內容相似的,並且最後一行是System.Threading.Monitor.E ...
  • 最近項目中,一些html內容需要顯示在ng-repeat內。 1,引用angular-sanitize.js 2,寫一個過濾器 最後是在html中使用過濾器 存儲於資料庫表內的html內容: 呈現效果: ...
  • 之前的舊版本為許多客戶服務了好多年,但隨著技術變更與發展,舊版已難以再挑起大梁。因本人一直都扎根在網教行業,對實現網路考試與培訓有著深刻的認識與理解,故打算用當前主流技術全新構建一套新的版本。新版本採用Net Core 2(目前已升級為Net Core 3)c#語言編寫(新版名為“麥荻網教系統”),... ...
  • System.Drawing is not supported on this platform. ...
  • 一、引言 fanout類型的Exchange,路由規則非常簡單:它會把所有發送到該Exchange的消息,路由到所有與它綁定的Queue中。假設有一個聊天室,各個客戶端都訂閱在同一fanout exchange type,那每個客戶端發送出來的消息,所有的客戶端都能收到,因為大家都訂閱了。此時,只需 ...
  • 在上次的文章中簡單介紹了 [Reface.NPI] 中的功能。 本期,將對這方法名稱解析規則進行詳細的解釋和說明, 以便開發者可以完整的使用 [Reface.NPI] 中的各種功能。 基本規則 方法名稱以 Insert , Delete , Select , Update 開頭 方法名以數個單詞構成 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...