1. 程式人生 > >ABP官方文檔翻譯 6.2.1 ASP.NET Core集成

ABP官方文檔翻譯 6.2.1 ASP.NET Core集成

mic 模型 binder let 轉換 span optional document clas

ASP.NET Core

  • 介紹
    • 遷移到ASP.NET Core?
  • 啟動模板
  • 配置
    • 啟動類
    • 模塊配置
  • 控制器
    • 應用服務作為控制器
  • 過濾器
    • 授權過濾器
    • 審計Action過濾器
    • 校驗過濾器
    • 工作單元Action過濾器
    • 異常過濾器
    • 結果過濾器
      • Ajax請求的結果緩存
  • 模型綁定器
  • 視圖
  • 客戶端代理
  • 集成測試

介紹

  本文檔描述了ABP如何集成ASP.NET Core。ASP.NET Core通過Abp.AspNetCore nuget包實現集成。

遷移到ASP.NET Core?

   

如果你已經有一個工程並考慮遷移到ASP.NET Core,你可以閱讀我們博客的帖子來了解我們遷移的經驗。

啟動模板

  你可以在啟動模板創建一個工程,這是一個簡單、空的web工程但是已經和ABP框架集成並進行了適當的配置。

配置

啟動類

為了使ABP集成到ASP.NET Core,我們需要在Startup類裏做一些更改,如下所示:

public class Startup
{
    public IServiceProvider ConfigureServices(IServiceCollection services)
    {
        //...

        
//Configure Abp and Dependency Injection. Should be called last. return services.AddAbp<MyProjectWebModule>(options => { //Configure Log4Net logging (optional) options.IocManager.IocContainer.AddFacility<LoggingFacility>( f => f.UseLog4Net().WithConfig("
log4net.config"
) ); }); } public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { //Initializes ABP framework and all modules. Should be called first. app.UseAbp(); //... } }

模塊配置

  你可以使用啟動配置來配置AspNet Core模塊(在模塊的PreInitialize方法中使用Configuration.Modules.AbpAspNetCore())。

控制器

  在ASP.NET Core中控制器可以是任何類型的類。它不僅限制於繼承自Controller的類。一個類以Controller(如ProductController)結尾就默認為MVC控制器。你也可以給任何類添加MVC的[Controller]特性使其成為一個控制器。這就是ASP.NET Core MVC工作的方式。參見ASP.NET Core文檔了解更多。

  如果你使用web層的類(如HttpContext)或返回一個視圖,最好繼承AbpController(它從MVC的Controller繼承)類。但是,如果你創建的API控制器僅僅使用對象,可以考慮創建一個POCO控制器類或者你可以按如下所描述的那樣使用應用服務作為控制器。

應用服務作為控制器

  ABP提供了基礎設施來創建應用服務。如果你想將應用服務作為控制器提供給遠程客戶端(可以像之前一樣使用dynamic web api),你可以在模塊的PreInitialize方法中通過一個簡單配置來實現。示例:

Configuration.Modules.AbpAspNetCore().CreateControllersForAppServices(typeof(MyApplicationModule).Assembly, moduleName: app, useConventionalHttpVerbs: true);

  CreateControllersForAppServices 方法接收一個程序集,把程序集裏所有的應用服務轉換為MVC控制器。你可以使用RemoteService特性在方法或類級別來啟用/禁用它。

  當一個應用服務轉換為MVC控制器,默認路由為/api/services/<module-name>/<service-name>/<method-name>。例如:如果ProductAppService定義了一個Create方法,它的URL將為/api/services/app/product/create(假定模塊的名字為‘app‘)。

  如果useConventionalHttpVerbs設置為true(默認值為true),那麽服務方法的HTTP動詞由命名約定來決定:

  • Get:方法名以‘Get‘開始時使用。
  • Put:方法名以‘Put‘或‘Update‘開始時使用。
  • Delete:方法名以‘Delete‘或‘Remove‘開始時使用。
  • Post:方法名以‘Post‘,‘Create‘或‘Insert‘開始時使用。
  • Patch:方法名以‘Patch‘開始時使用。
  • 否則,Post默認使用的HTTP動詞。

  你可以使用任何ASP.NET Core特性來改變HTTP方法或actions的路由(但是當然這需要添加相關ASP.NET Core包的引用)。 

  註意:之前,在給應用服務創建服務接口時需要動態wei api系統,但是對於ASP.NET Core集成不需要。同樣,MVC特性應該添加到服務類,即使已經有接口。 

過濾器

  ABP為AspNet Core 定義了一些內建過濾器。默認所有的過濾器會添加到所有控制器的所有actions。

授權過濾器

  AbpAuthorizationFilter用來集成授權系統和特征系統。

  • 你可以為actions或controllers定義AbpMvcAuthorize特性來在執行前檢查需求的權限。
  • 你可以為actions或controllers定義RequiresFeature特性來在執行前檢查需求的特征。
  • 你可以為actions或controllers定義AllowAnonymous(或在應用層定義AbpAllowAnoymous)特性來禁止校驗和授權。

審計Action過濾器

  AbpAuditActionFilter用來集成審計日誌系統。它默認為所有的actions記錄所有的請求(如果審計沒有禁用)。你可以為actions和controllers使用AuditedDisableAuditing特性來控制審計日誌。

校驗過濾器

  AbpValidationActionFilter用來集成校驗系統並自動為所有的actions校驗輸入。另外ABP內建校驗和標準化,它檢查MVC的Model.IsValid屬性並拋出校驗異常,如果action的輸入有任何無效值。

  你可以為actions和controllers使用EnableValidationDisableValidation特性來控制校驗。

工作單元Action過濾器

  AbpUowActionFilter用來集成工作單元系統。它在action執行前自動開始一個新的工作單元並在action結束後完成工作單元(如果沒有異常拋出)。

  你可以使用UnitOfWork特性來控制action的UOW行為。你也可以使用啟動配置來更改所有action的默認工作單元特性。

異常過濾器

  AbpExceptionFilter用來從controller actions中處理異常拋出。它處理並記錄異常,然後返回包裝的響應到客戶端:

  • 它僅處理對象結果,不處理視圖結果。所以,actions返回任何對象、JsonResult或者ObjectResult都會被處理。Action返回一個視圖或任何其他實現了IActionsResult的結果類型不會被處理。建議使用在Microsoft.AspNetCore.Diagonistics包中內建的UseExceptionHandler擴展方法來處理視圖異常。
  • 異常處理和日誌行為可以為方法或類使用WrapResult和DontWrapResult特性來改變。

結果過濾器

  AbpResultFilter主要用來包裝結果action,如果action執行成功的話。

  • 它僅包裝JsonResult、OjectResult和任何沒有實現IActionResult(還有相應的異步版本)的對象。如果你的action返回一個視圖或任何其他類型的結果,都不會被包裝。
  • WrapResultDontWrapResult特性可以用於方法和類來啟用/禁用包裝。
  • 你可以使用啟動配置來更改結果包裝的默認行為

Ajax請求的結果緩存

  AbpResultFilter為AJAX請求的響應添加了Cache-Control頭(no-cache,no-store)。因此,它阻止瀏覽器緩存AJAX響應甚至GET請求的響應。可以使用配置來禁用此功能。

模型綁定器

  AbpDateTimeModelBinder用來標準化DateTime(和Nullable<DateTime>)輸入,使用Clock.Normalize方法。

視圖

  MVC視圖可以繼承自AbpRazorPage來自動註入大多數使用的基礎設施(LocalizationManager、PermissionChecker、SettingManager...etc)。它也有快捷方法(如L(...)來本地化文本)。啟動模板默認繼承它。

  你可以使你的web組件繼承自AbpViewComponet而不是ViewComponent來使用基礎屬性和方法的優勢。

客戶端代理

  ABP可以自動為所有的MVC控制器(不僅僅是應用服務)創建javascript代理。它默認創建應用服務作為控制器(參見上面部分)。你可以為任何MVC控制器添加[RemoteService]特性來為它創建客戶端代理。Javascript代理在運行時動態生成。你需要在page中添加指定的script定義:

<script src="~/AbpServiceProxies/GetAll?type=jquery" type="text/javascript"></script>

  當前,只有JQuery代理生成。然後我們可以使用javascript來調用一個MVC方法,如下所示:

abp.services.app.product.create({
    name: ‘My test product‘,
    price: 99
}).done(function(result){
    //...
});

集成測試

  對於ASP.NET Core而言,集成測試相當容易,它自己的網站上有詳細的文檔。ABP跟隨這個導向並在Abp.AspNetCore.TestBase包中提供了AbpAspNetCoreIntegratedTestBase類。它使得集成測試更加簡單。

  最好在啟動模板裏探究集成測試。

返回主目錄

ABP官方文檔翻譯 6.2.1 ASP.NET Core集成