ABP官方文档翻译 6.2.1 ASP.NET Core集成
ASP.NET Core
介绍
本文档描述了ABP如何集成ASP.NET Core。ASP.NET Core通过Abp.AspNetCore nuget包实现集成。
迁移到ASP.NET Core?
如果你已经有一个工程并考虑迁移到ASP.NET Core,你可以阅读我们博客的帖子来了解我们迁移的经验。
启动模板
你可以在启动模板创建一个工程,这是一个简单、空的web工程但是已经和ABP框架集成并进行了适当的配置。
配置
启动类
为了使ABP集成到ASP.NET Core,我们需要在Startup类里做一些更改,如下所示:
public class Startup
{
public IServiceProvider ConfigureServices(IServiceCollection services)
{
//... //Configure Abp and Dependency Injection. Should be called last.
return services.AddAbp<MyProjectWebModule>(options =>
{
//Configure Log4Net logging (optional)
options.IocManager.IocContainer.AddFacility<LoggingFacility>(
f => f.UseLog4Net().WithConfig("log4net.config")
);
});
} public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
//Initializes ABP framework and all modules. Should be called first.
app.UseAbp(); //...
}
}
模块配置
你可以使用启动配置来配置AspNet Core模块(在模块的PreInitialize方法中使用Configuration.Modules.AbpAspNetCore())。
控制器
在ASP.NET Core中控制器可以是任何类型的类。它不仅限制于继承自Controller的类。一个类以Controller(如ProductController)结尾就默认为MVC控制器。你也可以给任何类添加MVC的[Controller]特性使其成为一个控制器。这就是ASP.NET Core MVC工作的方式。参见ASP.NET Core文档了解更多。
如果你使用web层的类(如HttpContext)或返回一个视图,最好继承AbpController(它从MVC的Controller继承)类。但是,如果你创建的API控制器仅仅使用对象,可以考虑创建一个POCO控制器类或者你可以按如下所描述的那样使用应用服务作为控制器。
应用服务作为控制器
ABP提供了基础设施来创建应用服务。如果你想将应用服务作为控制器提供给远程客户端(可以像之前一样使用dynamic web api),你可以在模块的PreInitialize方法中通过一个简单配置来实现。示例:
Configuration.Modules.AbpAspNetCore().CreateControllersForAppServices(typeof(MyApplicationModule).Assembly, moduleName: 'app', useConventionalHttpVerbs: true);
CreateControllersForAppServices 方法接收一个程序集,把程序集里所有的应用服务转换为MVC控制器。你可以使用RemoteService特性在方法或类级别来启用/禁用它。
当一个应用服务转换为MVC控制器,默认路由为/api/services/<module-name>/<service-name>/<method-name>。例如:如果ProductAppService定义了一个Create方法,它的URL将为/api/services/app/product/create(假定模块的名字为'app')。
如果useConventionalHttpVerbs设置为true(默认值为true),那么服务方法的HTTP动词由命名约定来决定:
- Get:方法名以'Get'开始时使用。
- Put:方法名以'Put'或'Update'开始时使用。
- Delete:方法名以'Delete'或'Remove'开始时使用。
- Post:方法名以'Post','Create'或'Insert'开始时使用。
- Patch:方法名以'Patch'开始时使用。
- 否则,Post为默认使用的HTTP动词。
你可以使用任何ASP.NET Core特性来改变HTTP方法或actions的路由(但是当然这需要添加相关ASP.NET Core包的引用)。
注意:之前,在给应用服务创建服务接口时需要动态wei api系统,但是对于ASP.NET Core集成不需要。同样,MVC特性应该添加到服务类,即使已经有接口。
过滤器
ABP为AspNet Core 定义了一些內建过滤器。默认所有的过滤器会添加到所有控制器的所有actions。
授权过滤器
AbpAuthorizationFilter用来集成授权系统和特征系统。
- 你可以为actions或controllers定义AbpMvcAuthorize特性来在执行前检查需求的权限。
- 你可以为actions或controllers定义RequiresFeature特性来在执行前检查需求的特征。
- 你可以为actions或controllers定义AllowAnonymous(或在应用层定义AbpAllowAnoymous)特性来禁止校验和授权。
审计Action过滤器
AbpAuditActionFilter用来集成审计日志系统。它默认为所有的actions记录所有的请求(如果审计没有禁用)。你可以为actions和controllers使用Audited和DisableAuditing特性来控制审计日志。
校验过滤器
AbpValidationActionFilter用来集成校验系统并自动为所有的actions校验输入。另外ABP內建校验和标准化,它检查MVC的Model.IsValid属性并抛出校验异常,如果action的输入有任何无效值。
你可以为actions和controllers使用EnableValidation和DisableValidation特性来控制校验。
工作单元Action过滤器
AbpUowActionFilter用来集成工作单元系统。它在action执行前自动开始一个新的工作单元并在action结束后完成工作单元(如果没有异常抛出)。
你可以使用UnitOfWork特性来控制action的UOW行为。你也可以使用启动配置来更改所有action的默认工作单元特性。
异常过滤器
AbpExceptionFilter用来从controller actions中处理异常抛出。它处理并记录异常,然后返回包装的响应到客户端:
- 它仅处理对象结果,不处理视图结果。所以,actions返回任何对象、JsonResult或者ObjectResult都会被处理。Action返回一个视图或任何其他实现了IActionsResult的结果类型不会被处理。建议使用在Microsoft.AspNetCore.Diagonistics包中內建的UseExceptionHandler扩展方法来处理视图异常。
- 异常处理和日志行为可以为方法或类使用WrapResult和DontWrapResult特性来改变。
结果过滤器
AbpResultFilter主要用来包装结果action,如果action执行成功的话。
- 它仅包装JsonResult、OjectResult和任何没有实现IActionResult(还有相应的异步版本)的对象。如果你的action返回一个视图或任何其他类型的结果,都不会被包装。
- WrapResult和DontWrapResult特性可以用于方法和类来启用/禁用包装。
- 你可以使用启动配置来更改结果包装的默认行为。
Ajax请求的结果缓存
AbpResultFilter为AJAX请求的响应添加了Cache-Control头(no-cache,no-store)。因此,它阻止浏览器缓存AJAX响应甚至GET请求的响应。可以使用配置来禁用此功能。
模型绑定器
AbpDateTimeModelBinder用来标准化DateTime(和Nullable<DateTime>)输入,使用Clock.Normalize方法。
视图
MVC视图可以继承自AbpRazorPage来自动注入大多数使用的基础设施(LocalizationManager、PermissionChecker、SettingManager...etc)。它也有快捷方法(如L(...)来本地化文本)。启动模板默认继承它。
你可以使你的web组件继承自AbpViewComponet而不是ViewComponent来使用基础属性和方法的优势。
客户端代理
ABP可以自动为所有的MVC控制器(不仅仅是应用服务)创建javascript代理。它默认创建应用服务作为控制器(参见上面部分)。你可以为任何MVC控制器添加[RemoteService]特性来为它创建客户端代理。Javascript代理在运行时动态生成。你需要在page中添加指定的script定义:
<script src="~/AbpServiceProxies/GetAll?type=jquery" type="text/javascript"></script>
当前,只有JQuery代理生成。然后我们可以使用javascript来调用一个MVC方法,如下所示:
abp.services.app.product.create({
name: 'My test product',
price: 99
}).done(function(result){
//...
});
集成测试
对于ASP.NET Core而言,集成测试相当容易,它自己的网站上有详细的文档。ABP跟随这个导向并在Abp.AspNetCore.TestBase包中提供了AbpAspNetCoreIntegratedTestBase类。它使得集成测试更加简单。
最好在启动模板里探究集成测试。
ABP官方文档翻译 6.2.1 ASP.NET Core集成的更多相关文章
- [Abp 源码分析]十七、ASP.NET Core 集成
0. 简介 整个 Abp 框架最为核心的除了 Abp 库之外,其次就是 Abp.AspNetCore 库了.虽然 Abp 本身是可以用于控制台程序的,不过那样的话 Abp 就基本没什么用,还是需要集合 ...
- ABP官方文档翻译 10.1 ABP Nuget包
ABP Nuget包 Packages Abp Abp.AspNetCore Abp.Web.Common Abp.Web Abp.Web.Mvc Abp.Web.Api Abp.Web.Api.OD ...
- ABP官方文档翻译 7.2 Hangfire集成
Hangfire集成 介绍 ASP.NET Core集成 ASP.NET MVC 5.x集成 面板授权 介绍 Hangfire是一个综合的后台job管理器.你可以 把它集成到ABP,用来取代默认的后台 ...
- ABP官方文档翻译 0.0 ABP官方文档翻译目录
一直想学习ABP,但囿于工作比较忙,没有合适的契机,当然最重要的还是自己懒.不知不觉从毕业到参加工作七年了,没留下点儿什么,总感觉很遗憾,所以今天终于卯足劲鼓起勇气开始写博客.有些事能做的很好,但要跟 ...
- ABP官方文档翻译 2.1 依赖注入
依赖注入 什么是依赖注入 传统方式的问题 解决方案 构造函数注入模式 属性注入模式 依赖注入框架 ABP依赖注入基础设施 注册依赖注入 传统注册 帮助接口 自定义/直接注册 使用IocManager ...
- Asp.Net Core 集成 Hangfire 配置使用 Redis 存储
Hangfire 官方支持 MSSQL 与 Redis(Hangfire.Pro.Redis) 两种 ,由于我的数据库是 MYSQL ,粗略查询了一下文档,现在对 .NET Core 支持的并不够好, ...
- asp.net core 集成JWT(一)
[什么是JWT] JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案. JWT的官网地址:https://jwt.io/ 通俗地来讲,JWT是能代表用户身份的令牌,可以使用JWT ...
- asp.net core 集成 log4net 日志框架
asp.net core 集成 log4net 日志框架 Intro 在 asp.net core 中有些日志我们可能想输出到数据库或文件或elasticsearch等,如果不自己去实现一个 Logg ...
- asp.net core集成MongoDB
0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 一.前言及MongoDB的介绍 最近在整合自己的框架,顺便把MongoDBD的最简单CRUD重构一下作为组件化集成到asp.net ...
随机推荐
- 洛谷 P1914 小书童——密码【字符串+模拟】
P1914 小书童——密码 题目背景 某蒟蒻迷上了“小书童”,有一天登陆时忘记密码了(他没绑定邮箱or手机),于是便把问题抛给了神犇你. 题目描述 蒟蒻虽然忘记密码,但他还记得密码是由一串字母组成.且 ...
- 洛谷 P1055 ISBN号码【字符串+模拟】
P1055 ISBN号码 题目描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”就是分隔 ...
- 【Keras】基于SegNet和U-Net的遥感图像语义分割
上两个月参加了个比赛,做的是对遥感高清图像做语义分割,美其名曰"天空之眼".这两周数据挖掘课期末project我们组选的课题也是遥感图像的语义分割,所以刚好又把前段时间做的成果重新 ...
- 用NPOI导出Excel,生成下拉列表、以及下拉联动列表(第1篇/共3篇)
最近帅帅的小毛驴遇到一个很奇葩的需求: 导出Excel报表,而且还要带下拉框,更奇葩的是,下拉框还是联动的. 小毛驴一天比较忙,所以这等小事自然由我来为她分忧了.经历了两天,做了几种解决方案,最后完美 ...
- 高级设置电脑系统windows7防火墙出错代码0×6D9原因与解决技巧
高级设置windows防火墙能够更好的保护电脑系统安全,在电脑系统windows7设置过程中难免会遇到某些问题,有用户在安装MRGT后想要打开SNMP的161端口,但在打开高级安全windows防火墙 ...
- Vue版本过渡变化
到了2.0以后,有哪些变化: 在每个组件模板,不在支持片段代码 之前: <template id="aaa"> <h3>我是组件</h3>< ...
- 学习总结:libevent--简单入门
libevent--简单入门 一.简介 libevent是一个c语言写的事件驱动库,轻量级,专注于网络,跨平台特性好,支持多种 I/O 多路复用.支持I/O,定时器和信号等事件,允许设置注册事件优先级 ...
- 阿里大鱼 阿里云api
阿里短信服务API接入指南及示例 : https://yq.aliyun.com/articles/59928 =========================================== ...
- 栏目class导航
<div id="index_nav"> <div class="index_nav"> <ul> <!-- 调用栏目 ...
- C# 内置 DateTime类详解
C# 内置 DateTime类详解 摘抄自微软官方文档,用来方便自己查阅:网址:https://msdn.microsoft.com/zh-cn/library/system.datetime(v=v ...