前言

上一篇文章介绍了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. sublime text3 搭建c++/c环境

    sublime搭建的c++/c使用很方便,实用性很强,自己阅览了无数的博客,csdn,博客园的都看了,最后还是自己摸索着搭建成功了,如果觉得还不错请给个评论谢谢.(提前声明本人专利不允许转载!!!!) ...

  2. Lambda 语法

    1.java8 Lambda表达式语法简介 (此处需要使用jdk1.8或其以上版本) Lambd表达式分为左右两侧 * 左侧:Lambda 表达式的参数列表 * 右侧:Lambda 表达式中所需要执行 ...

  3. JS模块规范:AMD,CMD,CommonJS

    浅析JS模块规范 随着JS模块化编程的发展,处理模块之间的依赖关系成为了维护的关键. AMD,CMD,CommonJS是目前最常用的三种模块化书写规范. CommonJS CommonJS规范是诞生比 ...

  4. javax.email 发送邮件 javaEmail ,java 邮件

    首先导入mail的jar包 然后代码如下 package aaa; import java.util.Date;import java.util.Properties; import javax.ma ...

  5. 上线前测试的bug,要不要处理,跟版本的关系

    最近有两个项目是在旧版本上实施的.上线前经过一轮测试后,发现了一些产品(我们的产品确实不稳定) 在这个项目上,修改产品bug是肯定的.但是要不要追踪这些bug? 这就跟版本使用范围有关系了,毕竟要考虑 ...

  6. Java实现GBK转码到UTF-8(文件)

    所以,虚无的悲叹,寻根问底仍是由于肉身的圈定.肉身蒙蔽了灵魂的眼睛,单是看见要回那无中去,却忘了你原是从那无中来.                                            ...

  7. [android]从书中编码方式,看编程思想

    <Android权威编程指南第3版>今天学习到第10章,感叹经验丰富的编程理念——解耦合. 编程理念肯定是尽可能解除耦合,让代码可以复用,书中多次提到关于参数传递的解耦,这又出现一次. 本 ...

  8. Python 【绘制图及turtle库的使用】

    前言 最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,整理了一下,挑了一些觉得不错的代码分享给大家(这些我都测试过,确实可以生成喔~赶快去试一下吧) one ...

  9. 在云服务搭建jupyter环境

    一.环境配置 centeos7 python3 二.安装jupyter notebook 1.安装jupyter 安装Jupyter Notebook 通过pip安装Jupyter Notebook ...

  10. Java学习笔记(2)——有关类

    Java类的高级特性: {Java管理文件机制:类包. 同一个包中的类互相访问时,可以不指定包名. 同一个包中的类不必存放在同一位置,如com.lang.class1和com.lang.class2可 ...