1. 程式人生 > >ASP.NET Zero--基礎設施

ASP.NET Zero--基礎設施

repo eat 兼容性 1.2 發送 round 適配 com 不支持

基礎設施

啟動類

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作為後臺工作管理,您可以輕松啟用它;

  1. 取消註釋AddHangfireUseHangfireDashboardUseHangfireServer行在Startup.cs(of Web.Mvc or Web.Host depending on your case)。
  2. 取消註釋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--基礎設施