前言

上一篇文章介绍了ABP的Web API,本文在继续介绍ABP的其他内容。

在ABP中,WEBAPI是一个值得用的东西。但其他东西,就不一定是那么好用了。

因为越深入的学习ABP,你就越会发现,它自身有着非常强的设计约束,而而微软的框架已经有一定的约束了,再使用一套附加约束,显然会更辛苦。

下面我们看一下ABP的Controller。

创建项目

首先,我们创建一个MVC项目,AbpMvcController。

然后引用Abp.Web.Mvc。

使用了ABP后,必须修改WebApiApplication的继承类,所以,原来的初始化的路由等等信息,要换个地方写了,下面我们看看变化。

将WebApiApplication改为继承Abp.Web.AbpWebApplication;Global.asax修改如下:

using Abp.Web;
using AbpMvcController;
using System;
using System.Web;
[assembly: PreApplicationStartMethod(typeof(PreStarter), "Start")]
namespace AbpMvcController
{
public class WebApiApplication : Abp.Web.AbpWebApplication<StartServiceModule>
{
protected override void Application_Start(object sender, EventArgs e)
{
base.Application_Start(sender, e);
}
}

public static class PreStarter
{
public static void Start()
{
WebApiApplication.AbpBootstrapper.PlugInSources.AddToBuildManager();
}
}
}

然后在App_Start文件夹新建StartModule,StartModule继承 AbpModule。

然后把在Global.asa中删除路由注册等信息,在StartModule中,重写出来。

PS:因为创建的是MVC项目,所以我们添加相应的依赖——[DependsOn(typeof(Abp.Web.AbpWebModule),typeof(AbpWebMvcModule))]。

代码如下:

[DependsOn(typeof(Abp.Web.AbpWebModule),typeof(AbpWebMvcModule))]
public class StartModule : AbpModule
{
public override void PreInitialize()
{
Configuration.Modules.AbpWeb().AntiForgery.IsEnabled = false;
Configuration.Modules.AbpWebCommon().SendAllExceptionsToClients = true;
}
public override void Initialize()
{
IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
public override void PostInitialize()
{
GlobalConfiguration.Configuration.Filters.Add(new ExceptionFilter());
}
public override void Shutdown()
{
}
}

现在我们尝试运行项目,结果项目成功启动,如下图。

即,我们虽然修改了WebApiApplication的继承类,但依然可以正常访问创建项目时,自动生成的Controller。

也就是说,ABP并没有改变MVC的逻辑。

AbpController

ABP中提供了一个AbpController,它相当于对对MVC的Controller的扩展。

现在,我们找到HomeController,修改它的继承,然后运行项目。

项目正常运行。

----------------------------------------------------------------------------------------------------

现在我们编写一个AuthorizeAttribute,然后放到这个继承AbpController的Controller上;代码如下:

[CustomAuthorize]
public class HomeController : AbpController
{
public ActionResult Index()
{
ViewBag.Title = "Home Page";

return View();
}
}

然后我们断点CustomAuthorizeAttribute的AuthorizeCore函数。

测试结构发现,断点可以被命中。

即,MVC的授权特性还可以正常使用。

----------------------------------------------------------------------------------------------------

ABP也提供了一个授权特性——AbpMvcAuthorize;很好理解,它是AuthorizeAttribute的一个扩展,和上面的AbpController一样。

结语

总体上来说,ABP框架对微软的WebApi做出了很好的封装,提供了比较高级的扩展,即,动态创建WebApi,它切实的简化了代码。

但,对Controller,它并没有提供太高级的功能,就是一些简单的扩展和再封装。

那么,如要使用ABP来开发MVC,就需要在学习微软MVC的基础上,再去学习ABP的方言了。

说实话,这样做有点累;所以,开发项目时,使用微软的MVC结构即可,因为网上有丰富的资源可用。

关于ABP的其他功能:

ABP的日志:ABP的日志因为没办法扩展到没引用ABP的类库里,而引用ABP又要引用一堆类库;所以,全系统使用ABP的日志几乎是不可能的,即,它意义不大,还是自己封装日志比较好。

ABP提供的EF:ABP提供的EF因其使用和配置太过繁琐,支持的功能又不是特别全面;且设计理念上,只有部分DDD的思想,然后,它还很难扩展;所以,基本上可以抛弃了,因为根本没法和业务做最完美的结合。事实上,随便找的开源的EF再封装框架都比ABP的好理解,好调用。

ABP的依赖注入:ABP的依赖注入也是依赖Castle,那就是说我们完全可以直接使用Castle,这样,效果比用他封装的好;如果项目可以使用Core框架开发,那直接使用Core的依赖注入就可以了,这个比ABP的强太多了。

----------------------------------------------------------------------------------------------------

代码已经传到Github上了,欢迎大家下载。

Github地址:https://github.com/kiba518/AbpMvcController

----------------------------------------------------------------------------------------------------

注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!
若您觉得这篇文章还不错,请点击下方的【推荐】,非常感谢!

https://www.cnblogs.com/kiba/p/12651512.html

【Net】ABP框架学习之它并不那么好用的更多相关文章

  1. ABP 框架学习-01篇

    从来没有自己写过太多的技术性文章,博客里面的文章都是拷贝别人的东西,做一个笔记功能给自己用的.最近觉得应该写点自己的学习博客 https://aspnetboilerplate.com/ ABP框架, ...

  2. 【Net】ABP框架学习之正面硬钢

    前言 本文介绍另一种学习ABP框架的方法,该方法为正面硬钢学习法... 我们不去官网下载模板,直接引用DLL,直接使用. WebApi项目创建 首先创建一个WebApi项目,结构如下. 然后Nuget ...

  3. ABP框架学习

    一.总体与公共结构 1,ABP配置 2,多租户 3,ABP Session 4,缓存 5,日志 6,设置管理 7,Timing 8,ABPMapper 9,发送电子邮件 二.领域层 10,实体 11, ...

  4. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  5. 老周的ABP框架系列教程 -》 一、框架理论初步学习

    老周的ABP框架系列教程 -- 一.框架理论初步学习   1. ABP框架的来源与作用简介 1.1  简介 1.1.1       ABP框架全称为"ASP.NET Boilerplate ...

  6. ABP框架源码学习之修改默认数据库表前缀或表名称

    ABP框架源码学习之修改默认数据库表前缀或表名称 1,源码 namespace Abp.Zero.EntityFramework { /// <summary> /// Extension ...

  7. 2019 年起如何开始学习 ABP 框架系列文章-开篇有益

    2019 年起如何开始学习 ABP 框架系列文章-开篇有益 [[TOC]] 本系列文章推荐阅读地址为:52ABP 开发文档 https://www.52abp.com/Wiki/52abp/lates ...

  8. 中小研发团队架构实践之生产环境诊断工具WinDbg 三分钟学会.NET微服务之Polly 使用.Net Core+IView+Vue集成上传图片功能 Fiddler原理~知多少? ABP框架(asp.net core 2.X+Vue)模板项目学习之路(一) C#程序中设置全局代理(Global Proxy) WCF 4.0 使用说明 如何在IIS上发布,并能正常访问

    中小研发团队架构实践之生产环境诊断工具WinDbg 生产环境偶尔会出现一些异常问题,WinDbg或GDB是解决此类问题的利器.调试工具WinDbg如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具 ...

  9. 基于ASP.NET MVC的ABP框架入门学习教程

    为什么使用ABP 我们近几年陆续开发了一些Web应用和桌面应用,需求或简单或复杂,实现或优雅或丑陋.一个基本的事实是:我们只是积累了一些经验或提高了对,NET的熟悉程度. 随着软件开发经验的不断增加, ...

随机推荐

  1. 树莓派3b+ 交叉编译 及升级 kernel

    安装 gcc pkg 等工具sudo apt-get install build-essential git 官方介绍 https://www.raspberrypi.org/documentatio ...

  2. 编译 ijg JPEG V8 库 GIF 库

    libjpeg-turbo-1.2.1太老了,不支持,从内存解压,这里编译支持 jpeg_mem_src 的 JPEG V9 wget http://www.ijg.org/files/jpegsrc ...

  3. mac笔记本编译go-ethereum报错CoreServices/CoreServices.h' file not found

    查看xcode是否安装: $ xcode-select --install xcode-select: error: command line tools are already installed, ...

  4. SQL Server 存储过程 函数 和sql语句 区别

    存储过程与sql语句 存储过程的优点: 1.具有更好的性能   存储过程是预编译的,只在创建时进行编译,以后每次执行存储过程都不需再重新编译,   而一般 SQL 语句每执行一次就编译一次,因此使用存 ...

  5. docker报错Error response from daemon: driver failed programming external connectivity on endpoint *

    服务端 通常会显示 port xxx allocated的,意思就是 xxx 端口被占用了. 如果报port allocated端口占用,就docker ps 查看正使用的镜像,docker kill ...

  6. ajax 瀑布流 demo

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. Windows主机与centOS虚拟机之间"ping不通"

    为什么要遇到这个问题 这是我重新安装centOS7.5虚拟机之后遇到的问题——我需要安装一个SecureCRT工具,结果主机与虚拟机没有ping通. 在安装这个工具之前需要进行主机与虚拟机的相互pin ...

  8. VS2019 C++动态链接库的创建使用(4) - C语言客户端

    前面提到过C++具有函数重载功能,所以引出的函数名会有变化,即名称改编,如果是C语言编写的客户端则无法正确识别. 处理方法: ①只需在宏定义中间增加 extern "C",但这种使 ...

  9. VUE npm run dev 启动时,报了一大堆错误 Node Sass could not find a binding for your current environment: Windows 64-bit with Node.js 7.x

    npm run dev 启动时,报了一大堆错误 Module build failed: Error: Missing binding E:\2017VocaSchool\vocationWeb\no ...

  10. 毕业设计——基于ZigBee的智能窗户控制系统的设计与实现

    题目:基于物联网的智能窗户控制系统的设计与实现 应用场景:突降大雨,家里没有关窗而进水:家中燃气泄漏,不能及时通风,威胁人身安全,存在火灾的隐患:家中窗户没关,让坏人有机可乘.长时间呆在人多.封闭的空 ...