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样板项目 ...
随机推荐
- oppo设备怎么样无需root激活XPOSED框架的教程
在非常多部门的引流或业务操作中,基本上都需要使用安卓的强大XPOSED框架,近期,我们部门购来了一批新的oppo设备,基本上都都是基于7.0以上版本,基本上都不能够获得root的su超级权限,即使一部 ...
- SpringBoot1
内容:
- winfrom SVG转Imge
svg矢量图的使用,将svg矢量图展示在pictureBox上,拖动可以应用到其他设计软件上,复杂一点,中间涉及到SVG的下载 以及 SVG转化为 图片等操作 效果图如下: 源码下载地址: htt ...
- MySQL 数据库死锁
数据库死锁 死锁的解决办法(1) 执行下面SQL,先查看哪些表被锁住了: select b.owner,b.object_name,a.session_id,a.locked_mode from v$ ...
- python从学渣到学沫的半月天
今天又要引进一个新的知识点了,就是模块,可以直接引用的一个东西,从实用性来说很强大,不过还是需要记住模块的类型啊,如何应用还是需要学习和了解的.其中模块是分三种的,一种内置模块python内部提供的功 ...
- MUI开发大全
最近很久没有更新博客了,因为一直在学习前端h5 手机app的开发.曾经一度觉得自己css和js学得不错,进入到前端领域后才发现水很深~,写代码时HBuilder和VS混用,HBuilder的快捷键和代 ...
- Python爬虫11-XML与XPath概述及lxml库的应用
GitHub代码练习地址:用lxml解析HTML,文件读取,etree和XPath的配合使用:https://github.com/Neo-ML/PythonPractice/blob/master/ ...
- win10下 anaconda 环境下python2和python3版本转换
在cmd的环境下,输入以下命令安装Python2.7的环境 conda create -n python27 python=2.7 anaconda 上面的代码创建了一个名为python27的pyth ...
- MyWebViewDemo【封装Webview常用配置和选择文件、打开相机、录音、打开本地相册的用法】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 封装webview的常用配置和选择文件.打开相机.录音.打开本地相册的用法.[如果想要使用简单的预览功能,可以参考<MyBri ...
- LindDotNetCore~docker里图像上生成中文乱码问题
回到目录 因为docker上的大部分镜像都是基于linux系统的,所以在向图像中写中文时需要考虑中文字体问题,例如在microsoft/aspnetcore2.0这个镜像,它是基于debian系统的, ...