因此,您可以在开发过程中获得格式良好的异常页面,并在生产中创建更加用户友好的错误页面。有关详细信息,请参阅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类用于 在单个位置定义应用程序的当前版本。版本和发布日期自动显示在后端应用页面的左下角。这有助于我们始终看到运行应用程序版本。