天天看點

ASP.NET ZERO 學習 —— (7) 開發手冊之基礎架構動态Web API層本地化EF架構整合授權功能設定導航緩存和Redis緩存背景任務和HANGFIRESignalR 內建日志DTO映射郵件發送二進制對象管理軟删除打包和壓縮基類CSRF/XSRF 保護版本控制

動态Web API層

SPA(單頁面應用)和MPA(多頁面應用)都使用AJAX來提供更好的使用者體驗,他們通過AJAX調用應用服務。是以有必要建立一個Web API Controller作為擴充卡(用戶端通過AJAX調用Web API Controller的action,然後調用應用服務的方法)

ABP架構使用應用服務接口定義自動建立動态Web API層,這裡實際上沒有Web API Controller。在.WebApi項目的 WebApiMoudule中建立動态Web API Controller。見動态Web API 層文檔了解更多。

當ABP動态建立Web API Controller時,你也可以建立regular Web API Controller。

本地化

ASP.NET Zero 使用者接口完全本地化。ASP.NET Zero 使用動态的,基于資料庫的,每個租戶的本地化。

xml檔案用作所需語言的基礎翻譯:

ASP.NET ZERO 學習 —— (7) 開發手冊之基礎架構動态Web API層本地化EF架構整合授權功能設定導航緩存和Redis緩存背景任務和HANGFIRESignalR 內建日志DTO映射郵件發送二進制對象管理軟删除打包和壓縮基類CSRF/XSRF 保護版本控制

你可以通過拷貝并翻譯來添加更多的所需語言xml檔案。需要注意的是xml檔案應該是一個嵌入式資源。

當你在預設語言對應的xml檔案中添加了一個新的本地化文本片段,那麼也應該對其他語言版本的xml檔案做相應的添加。沒有必要将它添加到資料庫遷移代碼中,因為xml檔案中的值将用作預設值。

應用語言在 DefaultLanguagesCreator 類中定義,這被作為Entity Framework 資料遷移的種子資料。是以,你想添加一種新的語言,隻需要将他添加至 DefaultLanguagesCreator 類裡即可。此外,您也可以添加相應的XML檔案作為應用的預設語言。

見本地化和語言管理了解更多。

EF架構整合

ASP.NET Zero使用了EF的code-first和migrations。XXXXDbContext(XXXX為你的項目名字)定義了DbContext類。Migration檔案夾包含了EF的Migrations。

XXXXRepositoryBase 類作為自定義倉儲類的基類。見EF架構整合了解更多。

授權

授權系統基于權限,AppPermissions 包含權限常量名,AppAuthorizationProvider 定義了系統中所有的權限。

見授權了解如何配置權限。

功能

AppFeatureProvider 為多租戶應用定義功能。功能的名字作為常量在AppFeatures 中定義。

見功能管理學習如何定義和使用功能。

設定

所有的設定都有一個唯一的名字。AppSettings 類中定義了設定的常量名。所有設定和他們的預設值都在 AppSettingProvider 類中定義。

見設定了解更多。

導航

菜單是通過定義在AppNavigationProvider 類中自動生成的。你有兩個菜單:Main(Angular應用中的主菜單)和FrontEnd(前端網站的主菜單)。

見導航了解更多。

緩存和Redis緩存

ASP.NET Zero 目前隻使用到Redis來作為記憶體緩存。如果你想啟用它,隻需要在WebModule中将下面的代碼取消注釋即可(在.Web項目中的App_Start檔案夾中)

見緩存了解更多。

背景任務和HANGFIRE

ABP架構包含background job system作為預設背景作業管理器。如果你想使用Hangfire作為背景作業管理器,你也可以很簡單的啟用它。

首先,在WebModule取消注釋以下代碼(在.Web項目中的App_Start檔案夾中)

Configuration.BackgroundJobs.UseHangfire(configuration =>
{
    configuration.GlobalConfiguration.UseSqlServerStorage("Default");
});
           

如果要啟用Hangfire儀表盤,在Startup.cs檔案中取消注釋以下代碼(在.Web項目中的App_Start檔案夾中)

注意:Hangfire在資料庫中建立了獨立的表。見背景任務和Hangfire內建了解更多

SignalR 內建

SignalR 在啟動模闆中已進行了配置和內建,即時通知系統将會用到它。你可以直接在應用中直接使用SignalR。見SignalR內建了解更多。

日志

ASP.NET Zero用 log4net 作為預設的日志元件,配置資訊在.Web項目的log4net.config檔案中。它預設将所有的日志寫入網站Logs檔案夾中。當你釋出你的項目時,記住将Logs檔案夾配置寫權限。

見日志文檔了解如何注入ILogger和寫日志。

DTO映射

ASP.NET Zero使用AutoMapper作為DTO和實體類的映射(和其他類型對象到對象的映射)。使用Abp.AutoMapper類庫就是使用了AutoMapper。

下面的DTO類被用來轉換租戶的編輯資訊

[AutoMap(typeof (Tenant))]
public class TenantEditDto : EntityDto
{
    [Required]
    [StringLength(Tenant.MaxTenancyNameLength)]
    public string TenancyName { get; set; }

    [Required]
    [StringLength(Tenant.MaxNameLength)]
    public string Name { get; set; }

    public bool IsActive { get; set; }
}
           

這裡,AutoMap屬性動态的建立了TenantEditDto和Tenant的映射,然後你可以按下面的方式将Tenant對象轉換成TenantEditDto對象。

[AbpAuthorize(AppPermissions.Pages_Tenants_Edit)]
public async Task<TenantEditDto> GetTenantForEdit(EntityRequestInput input)
{
    return (await TenantManager.GetByIdAsync(input.Id)).MapTo<TenantEditDto>();
}
           

MapTo方法執行映射。

自定義對象映射

在某些情況下,基于屬性的映射可能不夠,你可以在CustomDtoMapper 類中直接使用AutoMapper API來配置你自己的映射。

見資料傳輸對象了解更多DTOs資訊。

郵件發送

ASP.NET Zero在某些情況下會想使用者發送郵件(例如,忘記密碼和郵件确認)。郵件模闆定義放在.Core項目的Emailing/EmailTemplates檔案夾下(default.html),你可以通過編輯該檔案來更改你的郵件模闆。

郵件發送在調試模式下是被禁用的,這是因為在開發中可能不會配置郵件發送的相關屬性。如果你需要你可以啟用它。在釋出模式下它是被啟用的。如果你願意,你可以在XXXXCoreModule 類的PreInitialize 方法裡來更改它。

二進制對象管理

使用者頭像被存放在資料庫裡,而不是存放在檔案系統裡。但是因為性能原因,它不是存放在使用者表裡(使用者資訊會很頻繁的從資料庫中檢索,但使用者頭像很少需要)。

在ASP.NET Zero裡建構了個通用的二進制檔案存儲機制:BinaryObject實體可以用于儲存任何類型的二進制對象(byte數組)。由于使用者頭像可以被轉換成byte數組,是以使用者頭像就被存放在這裡。

IBinaryObjectManager 接口定義了Save, Get和Delete 二進制對象的方法。DbBinaryObjectManager 實作了将二進制對象儲存進資料庫。例如,ProfileController 使用了IBinaryObjectManager 接口來從資料庫擷取使用者頭像。

你也可以通過來實作IBinaryObjectManager接口,以另一種方式讓檔案存放在其他地方。

軟删除

從資料庫中删除實體,一般都使用軟删除模式,僅将其标記為“删除”。是以,一個實體被軟删除,那麼它不會被應用檢索到。利用ABP的Data filters将其過濾。

ASP.NET Zero裡,許多實體都可以被軟删除。見ABP的資料過濾了解更多。

打包和壓縮

ASP.NET Zero使用ASP.NET Optimization來進行打包和壓縮腳本和樣式檔案。打包定義在不同的檔案裡:

- AppBundleConfig 用來對SPA檔案進行打包

- MpaBundleConfig 用來對MPA檔案進行打包

- FrontEndBundleConfig 用來對前台檔案進行打包

- CommonBundleConfig 用來一些通用資源檔案進行打包

另外,參見 ScriptPaths 和 StylePaths 類,他們包含了JS和CSS檔案的位置常量。

基類

在應用裡會用到許多有用的基類

- XXXXAppServiceBase : application services 的基類

- XXXXDomainServiceBase : domain services 的基類

- XXXXControllerBase : ASP.NET MVC Controllers 的基類

- XXXXWebViewPageBase : ASP.NET MVC Views的基類。實際上,所有視圖将自動的繼承該基類,你可以添加一些通用的屬性或方法在所有視圖中使用。

- XXXXServiceBase : 其他服務類的基類。例如,UserEmailer 類。

- XXXXRepositoryBase : 自定義倉儲的基類

- XXXXApiControllerBase : regular Web API Controllers 的基類

強烈建議繼承這些類中的一個,因為它們确實使日志、本地化、授權等更容易

CSRF/XSRF 保護

ABP架構盡可能多的提供了簡單和自動化的CSRF保護。ASP.NET Zero模闆預配置了CSRF保護。見ABP的CSRF/XSRF 保護了解更多。

版本控制

AppVersionHelper 類用來定義應用的目前版本。當你在這裡改變了版本,應用裡的所有項目的版本都将被改變。此外,版本和釋出日期将自動顯示在應用程式頁的左下角。這樣,你總是可以看到目前運作的應用版本。

繼續閱讀