基础设施

启动类

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

ASP.NET Zero--基础设施的更多相关文章

  1. ASP.NET 开发人员不必担心 Node 的五大理由

    哦别误会……我真的很喜欢 Node,而且我觉得它提出的概念和模式将在很长一段时间内,对服务端 Web 编程产生深远的影响.即使随着时间的推移 Node 过气了,我们肯定可以从下一个牛逼玩意身上或多或少 ...

  2. 基于DDD的现代ASP.NET开发框架--ABP系列文章总目录

    ABP相关岗位招聘:给热爱.NET新技术和ABP框架的朋友带来一个高薪的工作机会 ABP交流会录像视频:ABP架构设计交流群-7月18日上海线下交流会的内容分享(有高清录像视频的链接) 代码自动生成: ...

  3. Asp.Net WebApi核心对象解析(上篇)

    生活需要自己慢慢去体验和思考,对于知识也是如此.匆匆忙忙的生活,让人不知道自己一天到晚都在干些什么,似乎每天都在忙,但又好似不知道自己到底在忙些什么.不过也无所谓,只要我们知道最后想要什么就行.不管怎 ...

  4. ASP.NET Core 中文文档 第四章 MVC(4.2)控制器操作的路由

    原文:Routing to Controller Actions 作者:Ryan Nowak.Rick Anderson 翻译:娄宇(Lyrics) 校对:何镇汐.姚阿勇(Dr.Yao) ASP.NE ...

  5. ASP.NET Core 中文文档 第五章 测试(5.2)集成测试

    原文: Integration Testing 作者: Steve Smith 翻译: 王健 校对: 孟帅洋(书缘) 集成测试确保应用程序的组件组装在一起时正常工作. ASP.NET Core支持使用 ...

  6. ASP.NET Web API 控制器执行过程(一)

    ASP.NET Web API 控制器执行过程(一) 前言 前面两篇讲解了控制器的创建过程,只是从框架源码的角度去简单的了解,在控制器创建过后所执行的过程也是尤为重要的,本篇就来简单的说明一下控制器在 ...

  7. ABP(现代ASP.NET样板开发框架)系列之2、ABP入门教程

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之2.ABP入门教程 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...

  8. ABP(现代ASP.NET样板开发框架)系列之3、ABP分层架构

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之3.ABP分层架构 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...

  9. ABP(现代ASP.NET样板开发框架)系列之17、ABP应用层——参数有效性验证

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之17.ABP应用层——参数有效性验证 ABP是“ASP.NET Boilerplate Project (ASP. ...

  10. ABP(现代ASP.NET样板开发框架)系列之18、ABP应用层——权限验证

    点这里进入ABP系列文章总目录 ABP(现代ASP.NET样板开发框架)系列之18.ABP应用层——权限验证 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目 ...

随机推荐

  1. ASP.NET三层架构项目创建流程

    1.进入VS2010,新建项目—>Visual C#—>Web—>ASP.NET空Web应用程序,如图所示: 2.在解决方案处右击—>新建项目—>Windows—> ...

  2. Java笔记(day12)

    包: 对类文件进行分类管理:给类提供多层命名(名称)空间:写在程序文件的第一行:类名的全称是 包名.类名包也是一种封装形式: package protected必须是成为其子类,才能继承import导 ...

  3. USB总线标准

    1.USB总线类型: OHCI(Open Host Controller Interface)是支持USB1.1的标准,但它不仅仅是针对USB,UHCI(Universal Host Controll ...

  4. 用系统为centos6的主机,搭建PXE服务器,实现批量安装centos6,7系统

    1. iptables -F setenforce 0 临时关掉selinux,清掉防火墙 永久生效更改配置文件:vim /etc/sysconfig/selinux chkconfig iptabl ...

  5. 5G 时代,可能是什么样呢?

        (摄于上海陆家嘴) 众所周知,5g时代即将到来,其相关的区块链技术也将在更多的领域以及方面发挥越来越多的作用. 与新模式与新领域这种软性变化不同,新技术的产生,有着足够的想象空间.仅从内容创作 ...

  6. 在线修改redo日志大小

    注意点:1.redo要是能sesize的话就完美了2.drop时候如果active就得checkpoint才能drop3.物理删除旧redo文件redo大小影响切换,进而影响性能,至于什么样的业务设置 ...

  7. 第四周LINUX 学习笔记

    内核编译丶sed丶awk Linux:单内核    模块化:动态      /lib/modules      lsmod,modinfo,modprobe,insmod,,modprobe -r , ...

  8. 信利SC123金融财务计算器评测——不错的HP 12C仿品

    最近X宝48包邮购入信利SC123金融计算器,只是为了玩一玩(没错你的好友盗版狂魔又上线了),因为这是目前市面上能买到的最便宜的金融计算器了,也是能买到的最便宜的RPN计算器,顺手出个评测.这个计算器 ...

  9. WEB框架-Django框架学习-关联管理器(RelatedManager)

    一.class RelatedManager "关联管理器"是在一对多或者多对多的关联上下文中使用的管理器.它存在于下面两种情况: 1.一对多 ForeignKey关系的“另一边” ...

  10. IIS虚拟目录挂载文件服务器目录

    要求说明: 通过网站上传文件保存到统一的文件服务器上. 服务器说明: 1.文件服务器以下称为FilesServer,IP地址为:192.168.1.213 2.Web服务器为以下称为WebServer ...