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--基础设施的更多相关文章
- ASP.NET 开发人员不必担心 Node 的五大理由
哦别误会……我真的很喜欢 Node,而且我觉得它提出的概念和模式将在很长一段时间内,对服务端 Web 编程产生深远的影响.即使随着时间的推移 Node 过气了,我们肯定可以从下一个牛逼玩意身上或多或少 ...
- 基于DDD的现代ASP.NET开发框架--ABP系列文章总目录
ABP相关岗位招聘:给热爱.NET新技术和ABP框架的朋友带来一个高薪的工作机会 ABP交流会录像视频:ABP架构设计交流群-7月18日上海线下交流会的内容分享(有高清录像视频的链接) 代码自动生成: ...
- Asp.Net WebApi核心对象解析(上篇)
生活需要自己慢慢去体验和思考,对于知识也是如此.匆匆忙忙的生活,让人不知道自己一天到晚都在干些什么,似乎每天都在忙,但又好似不知道自己到底在忙些什么.不过也无所谓,只要我们知道最后想要什么就行.不管怎 ...
- ASP.NET Core 中文文档 第四章 MVC(4.2)控制器操作的路由
原文:Routing to Controller Actions 作者:Ryan Nowak.Rick Anderson 翻译:娄宇(Lyrics) 校对:何镇汐.姚阿勇(Dr.Yao) ASP.NE ...
- ASP.NET Core 中文文档 第五章 测试(5.2)集成测试
原文: Integration Testing 作者: Steve Smith 翻译: 王健 校对: 孟帅洋(书缘) 集成测试确保应用程序的组件组装在一起时正常工作. ASP.NET Core支持使用 ...
- ASP.NET Web API 控制器执行过程(一)
ASP.NET Web API 控制器执行过程(一) 前言 前面两篇讲解了控制器的创建过程,只是从框架源码的角度去简单的了解,在控制器创建过后所执行的过程也是尤为重要的,本篇就来简单的说明一下控制器在 ...
- ABP(现代ASP.NET样板开发框架)系列之2、ABP入门教程
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之2.ABP入门教程 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...
- ABP(现代ASP.NET样板开发框架)系列之3、ABP分层架构
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之3.ABP分层架构 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...
- ABP(现代ASP.NET样板开发框架)系列之17、ABP应用层——参数有效性验证
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之17.ABP应用层——参数有效性验证 ABP是“ASP.NET Boilerplate Project (ASP. ...
- ABP(现代ASP.NET样板开发框架)系列之18、ABP应用层——权限验证
点这里进入ABP系列文章总目录 ABP(现代ASP.NET样板开发框架)系列之18.ABP应用层——权限验证 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目 ...
随机推荐
- spring boot整合mybatis方式一
方式一: 导入maven依赖: <!--web依赖配置--> <dependency> <groupId>org.springframework.boot</ ...
- 使用CSS3的clip-path(裁剪路径)实现剪贴区域的显示以及实例实现图片渐变
clip-path介绍 clip-path 直译过来就是裁剪路径,使用SVG或形状定义一个HTML元素的可见区域的方法.想象一下你在Photoshop中勾勒路径的场景.MDN上是这样介绍 clip-p ...
- oppo设备怎么样无需root激活XPOSED框架的教程
在非常多部门的引流或业务操作中,基本上都需要使用安卓的强大XPOSED框架,近期,我们部门购来了一批新的oppo设备,基本上都都是基于7.0以上版本,基本上都不能够获得root的su超级权限,即使一部 ...
- gitbook 入门教程之 gitbook 简介
gitBook 是一个基于node.js的命令行工具,使用 github/git 和 markdown/asciiDoc 构建精美的电子书. gitbook 支持输出静态网页和电子书等多种格式,其中默 ...
- 同事搭一个测试RAC说节点2发现idle了,报ORA-00304
[oracle@testrac2 11204]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Wed Jan 16 1 ...
- 第一周Python学习笔记
Python 基本语法: ① Python程序的格式:1.用代码高亮来标识函数丶语句等等 本身的代码高亮并没有实际的意义,只是用来辅助编程人员和阅读人员 更好的识别 2.程序以缩进来标识语句,缩进用 ...
- 探索JS引擎工作原理
JavaScript 从定义到执行,JS引擎在实现层做了很多初始化工作,因此在学习 JS 引擎工作机制之前,我们需要引入几个相关的概念:执行环境栈.全局对象.执行环境.变量对象.活动对象.作用域和作用 ...
- Ansible自动化运维工具安装与使用实例
1.准备两台服务器,要确定网络是通的.服务器当然越多越好啦....Ansible的简介和好处我就不多说了,自己看百科去(*╹▽╹*) IP:192.168.139.100 IP:192.168.139 ...
- LogUtil【实现自由的控制日志的打印的封装类】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 主要用于控制项目开发和上线阶段日志的打印. 效果图 暂不需要. 代码分析 在LogUtil类中声明代表不同日志级别的常量值(VERB ...
- 把ABP框架部署到Docker中
本文旨在将Abp项目部署到Docker容器中,借助Gitee存储,Jenkins持续构建,利用Docker Compose生成镜像.启动镜像,在官网给定的Abp项目中,虽然用到了Dockerfile. ...