動态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檔案用作所需語言的基礎翻譯:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiQ3chVEa0V3bT9CX5RXa2Fmcn9CXwczLcVmds92czlGZvwVP9EUTDZ0aRJkSwk0LcxGbpZ2LcBDM08CXlpXazRnbvZ2LcRlMMVDT2EWNvwFdu9mZvwVP9cHZ2hmMZZmSYFGaSNzYwh3VZZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39DN0kTNxUDM0EDOyIDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
你可以通過拷貝并翻譯來添加更多的所需語言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 類用來定義應用的目前版本。當你在這裡改變了版本,應用裡的所有項目的版本都将被改變。此外,版本和釋出日期将自動顯示在應用程式頁的左下角。這樣,你總是可以看到目前運作的應用版本。