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文件用作所需语言的基本翻译:

本地化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. 取消注释AddHangfireUseHangfireDashboard 和UseHangfireServer行在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类用于 在单个位置定义应用程序的当前版本版本和发布日期自动显示在后端应用页面的左下角。这有助于我们始终看到运行应用程序版本。

posted @ 2017-05-07 14:00  liyongke  阅读(1428)  评论(0编辑  收藏  举报