ASP.NET Zero--基礎設施
基礎設施
啟動類
ASP.NET Core從應用程序中的Startup類初始化。我們在這個類中配置所有庫(包括ABP)。我們建議您先檢查此課程。它也被集成到 OWIN。所以,你可以在這裏添加OWIN中間件。
Bower和前端依賴
ASP.NET Zero解決方案使用bower package manager 以獲得前端庫依賴(如bootstrap和jQuery)。因此,您可以輕松地添加新的軟件包或更新Visual Studio或bower的命令行界面上的現有軟件包。您可以在.Web.Mvc項目的Dependencies / Bower下看到所有安裝的bower軟件包。
應用服務作為MVC API控制器
ASP.NET Zero項目高度使用AJAX來提供更好的用戶體驗。UI 通過AJAX 調用應用程序服務方法。因此,需要創建MVC API控制器作為適配器(A客戶端通過AJAX調用MVC API Controller操作,然後調用應用程序服務方法)。ABP框架自動為所有應用程序服務創建MVC API控制器。因此,無需手動創建應用程序服務的MVC API控制器。有關更多信息,請參閱相關 文檔。當ABP動態創建Web API控制器時,我們也可以像我們一直那樣創建常規的MVC API控制器。
本土化
ASP.NET Zero用戶界面完全本地化。AspNet Zero采用動態,基於數據庫的租戶 本地化(見上文相關部分)。
XML文件用作所需語言的基本翻譯:
PhoneBook將是您的ProjectName。您可以通過復制一個XML文件並轉換為所需的語言來添加更多的XML文件。請參閱 有效的文化編碼。
當您添加新的本地化文本時,將其添加到默認語言的XML文件,然後在應用程序中使用(另外,將轉換的值添加到相應的XML文件)。由於XML文件中的值將被默認使用,因此無需將其添加到數據庫遷移代碼中。
應用程序語言在 DefaultLanguagesCreator類中定義。這被用作 實體框架遷移中的種子數據。因此,如果要添加新的默認語言,只需將其添加到DefaultLanguagesCreator類中即可。此外,您應該將如上所述的相應的XML文件添加為默認翻譯。
有關更多信息,請參閱 本地化和 語言管理文檔。
ENTITYFRAMEWORKCORE集成
ASP.NET Zero模板使用EntityFrameworkCore代碼優先和遷移。PhoneBook DbContext(您的項目的YourProjectDbContext)定義了DbContext類。Migrations文件夾包含EF遷移。
PhoneBook RepositoryBase類是您的自定義存儲庫的基類。有關更多信息,請參閱實體 框架集成文檔。
數據庫遷移
您可以使用軟件包管理器控制臺添加新的遷移,並像通常那樣更新數據庫。有關詳細信息,請參閱EF Core的文檔。
異常處理
ASP.NET Zero使用ABP的 異常處理系統。因此,您不需要在大多數時間內處理和關心異常。
ASP.NET Zero解決方案在 啟動 類中添加了異常處理中間件:
if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseStatusCodePagesWithRedirects(“?/ Error?statusCode = {0}”);
app.UseExceptionHandler(“/ Error”);
}
因此,您可以在開發過程中獲得格式良好的異常頁面,並在生產中創建更加用戶友好的錯誤頁面。有關詳細信息,請參閱ErrorController及其相關視圖(Views \ Error)。
用戶密碼
ASP.NET Core引入了 用戶密碼 系統來存儲敏感數據在開發中。ASP.NET Zero使用此系統(它已正確配置為您的解決方案)。您可能希望在開發中使用不同的連接字符串(或社交媒體API密鑰),並且不想在項目中的appsettings.json中添加這些秘密數據(並且不想將這些敏感信息提交到源代碼管理系統)。然後使用秘密管理器工具將此敏感信息存儲在本地計算機中,並允許應用程序從本地計算機讀取它們(如果可用)。
例如,你可以使用下面的命令,在Windows 命令提示符中的位置的核心項目,更改連接字符串為您的本地開發環境:
dotnet user-secrets set ConnectionStrings:default “Server = 1.2.3.4; Database = MyProjectDevDb; User = sa; Password = 12345678”
此用戶密碼值將覆蓋appsettings.json中的值。有關用戶密碼的詳細信息,請參閱ASP.NET 自己的文檔。
授權提供者
Authorization system是基於權限的。AppPermissions 包含權限名稱的常量, AppAuthorizationProvider類定義系統中的所有權限。在應用層中使用它之前,我們應該定義一個權限。
請參閱 授權文檔了解如何配置權限。
功能提供者
AppFeatureProvider類定義了多租戶應用程序的功能。功能名稱在AppFeatures 類中定義為contants。
請參閱 功能管理文檔,了解如何定義和使用功能。
設置提供者
每個設置都有一個唯一的名稱。設置名稱在 AppSettings類中定義為常量。所有設置及其默認值在AppSettingProvider類中定義。
請參閱 設置文檔以了解如何創建和使用設置。
導航提供商
使用 AppNavigationProvider類中的定義自動生成菜單。我們有兩個菜單:Main (後端應用程序的主菜單)和FrontEnd(前端網站的主菜單)。
見 導航文檔以獲取更多信息。
緩存和REDIS緩存
ASP.NET Zero使用內存緩存,但它可以使用 Redis作為緩存服務器。如果你想啟用它,只是取消註釋在以下行WebCoreModule(在你的.Web.Core項目):
Configuration.Caching.UseRedis(...);
Redis服務器應該運行起來才能使用它。有關更多信息,請參閱 緩存文檔。
後臺作業和HANGFIRE
ABP框架包含一個後臺作業系統有 默認的後臺作業管理。如果您想使用Hangfire作為後臺工作管理,您可以輕松啟用它;
- 取消註釋AddHangfire和UseHangfireDashboard 和UseHangfireServer行在Startup.cs(of Web.Mvc or Web.Host depending on your case)。
- 取消註釋Configuration.BackgroundJobs.UseHangfire在您的.Web.Core項目中的WebCoreModule.cs類。
註意:在第一次運行時,Hangfire會在數據庫中創建自己的表。有關更多信息,請參閱 後臺工作和 hangfire intergation文檔。
SIGNALR集成
SignalR已正確配置並集成到啟動模板。實時通知和聊天系統使用它。您可以直接在您的應用程序中使用SignalR。
註意; 目前,SignalR 尚未發布 給ASP.NET Core。我們將OWIN 集成到ASP.NET Core管道中,以便在應用程序中使用SignalR。有關 SignalR的更多信息,請參閱 SignalR集成文檔。
.Net Core兼容性
由於SignalR尚未準備好.net core,如果選擇.net core作為基礎框架,則SignalR集成將被禁用。
記錄
ASP.NET Zero使用Log4Net作為默認記錄。配置在.Web項目的log4net.config文件中定義。它默認將所有日誌寫入網站的App_Data / Logs / Logs.txt文件夾。發布項目時,請記住配置對“日誌”文件夾的寫入權限。
檢查 日誌記錄文檔以了解如何註入ILogger並寫入日誌。
DTO映射
ASP.NET Zero使用AutoMapper 進行DTO到Entity映射(以及其他類型的對象到對象映射)。我們使用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對象轉換為TenantEditDto對象,如下所示:
[AbpAuthorize(AppPermissions.Pages_Tenants_Edit)]
public async task<TenantEditDto> GetTenantForEdit(EntityRequestInput input)
{
return(wait TenantManager.GetByIdAsync(input.Id)).MapTo <TenantEditDto>();
}
MapTo擴展方法執行映射。
自定義對象映射
在某些情況下,基於屬性的映射可能不足。如果您需要直接使用Automapper API來配置映射,那麽您應該在 CustomDtoMapper類中進行。
有關DTO的更多信息,請參閱 數據傳輸對象文檔。
發送電子郵件
ASP.NET Zero在某些情況下會向用戶發送電子郵件(如忘記密碼和電子郵件確認)。電子郵件模板在 .Core項目(default.html)的Emailing / EmailTemplates文件夾中定義。您可以通過編輯此文件來更改默認電子郵件模板。
電子郵件發送在DEBUG模式下被禁用。因為開發環境可能未正確配置來發送電子郵件。你可以啟用它,如果你想要的。它在RELEASE模式下啟用。檢查 YourProjectName CoreModule類的PreInitialize方法,如果您願意更改它。
.Net core兼容性
由於.net core不支持smpt客戶端,AspNet Zero使用MailKit發送電子郵件。
BINARYOBJECTMANAGER
用戶個人資料圖片存儲在數據庫中,而不是文件系統。但是由於性能原因,它不會存儲在Users表中(用戶經常從數據庫檢索,但是很少需要個人資料圖片)。
ASP.NET Zero內置的通用二進制保存機制。 BinaryObject實體可用於保存任何類型的二進制對象(字節數組)。由於可以將個人資料圖片轉換為字節數組,因此在此保存用戶個人資料圖片。
IBinaryObjectManager接口定義保存,獲取和刪除二進制對象的方法。DbBinaryObjectManager實現它在數據庫中保存二進制對象。例如,ProfileController 使用IBinaryObjectManager從數據庫中獲取當前用戶的個人資料圖片。
您可以創建不同的IBinaryObjectManager 接口實現來將文件存儲在另一個目的地。
軟刪除
通常使用軟刪除模式,用於不從數據庫中刪除實體,但只將其標記為“已刪除”。因此,如果一個實體是軟刪除的,那麽它不應該被意外地檢索到應用程序中。ABP的 數據過濾器自動進行。
在ASP.NET Zero中,大多數實體都是軟刪除的。有關此主題的更多信息,請參閱ABP的 數據過濾器文檔。
捆綁,分類和編譯
ASP.NET Zero使用 Bundler&Minifier Visual Studio擴展來捆綁和縮小腳本和樣式文件。它應該安裝在您的Visual Studio中。bundleconfig.json 文件定義了所有捆綁配置。
ASP.NET Zero還使用 WebCompiler Visual Studio擴展將 LESS文件編譯為CSS文件。此擴展也應該安裝在您的Visual Studio中。 compilerconfig.json定義所有編譯配置。
請參閱這些擴展的文檔以學習使用它們。
基礎類
應用程序中使用了一些有用的基類:
- PhoneBook AppServiceBase可以用作所有應用程序服務的基類。
- PhoneBook DomainServiceBase可以用作域服務的基類。
- PhoneBook ControllerBase 可用作ASP.NET Core MVC控制器的基類。
- PhoneBook RazorPage 可以作為ASP.NET MVC視圖的基類。實際上,所有視圖都會自動繼承,因為它在_ViewImports.cshtml文件中定義 。您可以在這裏添加一些常用的屬性/方法,以便在所有視圖中使用。
- PhoneBook ServiceBase可以用作其他類似服務的類的基類。例如,UserEmailer類繼承它。
- PhoneBook RepositoryBase可以用作 自定義存儲庫實現的基類 。
強烈建議您根據需要繼承其中的一個類,因為它們使得日誌記錄,本地化,授權...更容易。
CSRF / XSRF保護
ABP框架盡可能簡化和自動化CSRF保護。AspNet Zero模板預先配置並開箱即用。有關更多信息,請參閱ABP的 XSRF-CSRF保護文檔
版本
AppVersionHelper類用於 在單個位置定義應用程序的當前版本。版本和發布日期自動顯示在後端應用頁面的左下角。這有助於我們始終看到運行應用程序版本。
ASP.NET Zero--基礎設施