这里的内容和ABP 动态webapi没有关系。除了动态webapi,ABP必然是支持使用传统的webApi。ABP.Web.Api模块中实现了一些同意的基础功能,以方便我们创建和使用asp.net webApi。

AbpApiController:这是一个抽象基类,继承自ApiController,是AB WebApi系统中所有controller的基类。如下图中,其封装了ABP核心模块中提供的大多数的功能对象。同时实现了一些公共的方法。它有四个派生类:DynamicApiController<T>,TypeScriptController,AbpCacheController,AbpServiceProxiesController。

ApiControllerConventionalRegistrar:所有AbpApiController的派生类都被register到ABP系统的容器中

HttpParameterBindingExtensions:HttpParameterBinding类的扩展方法,用于判断方法参数是否从URI取值。

AbpApiAuthorizeAttribute:实现了IAbpAuthorizeAttribute,继承ASP.NET 的AuthorizeAttribute。其封装了Permissions和RequireAllPermissions用于配置权限,其重写了IsAuthorized的方法用于实现ABP的授权校验逻辑。

AbpRemoteCallException:继承AbpException。用于封装ABP webapi返回给客户端(C#)的Exception.

IAbpWebApiClient:定义了访问ABP webAPI的接口。

AbpWebApiClient:实现了IAbpWebApiClient中定义的访问ABP webapi的方法。其内部通过封装HttpClient来访问webapi,然后根据远程API的response返回相应的结果给客户端。

以下两个方法用于将CLR对象转换为json对象,或者将Json对象转换为CLR对象。这边定义的将CLR对象转换为Json对象方法似乎多余了,因为作者已经在ABP核心框架中定义了一个object的扩展方法将CLR对象转换为Json对象。

AbpCacheController : 继承自AbpApiController,用于清理缓存(clear 和 ClearAll)。

ClearAllCacheModel : 只有一个password 属性。

ClearCacheModel:有一个password 属性和一个待清空的cache's name数组

ClearCacheSettingProvider:注意清理缓存的方法会先检验密码,清除缓存的密码是以setting配置到ABP中的。ClearCacheSettingProvider为该设置提供了一个初始密码,密码是硬编码到代码中的,如下图:

也就是你可以用这个密码清空任何套用ABP模板开发的站点(没有重新设置这个密码)的缓存。这里建议你到web.config中重置这个密码。

WrapResultAttribute:该特性用于标注webApi如何封装response.比如WrapOnError表示将错误信息封装到response返回到客户端。LogError标识将错误信息log到日志中。

HttpActionDescriptorHelper:通过action的HttpActionDescriptor来获取controller或action的WrapResultAttribute。

AbpExceptionFilterAttribute:继承自ExceptionFilterAttribute,重写OnException,以实现自定义的ExceptionFilter:根据action上标注的wrapResult来判断是否要log或通过eventbus触发事件

DynamicApiClientBuilder,IApiClientBuilder<TService>,ApiClientBuilder<TService>,DynamicApiClientBuilder:未实现,暂时忽略。

HttpVerbExtensions:HttpVerb的扩展方法,用于和httpmethod的比较。

返回ABP源码分析系列文章目录

ABP源码分析三十六:ABP.Web.Api的更多相关文章

  1. ABP源码分析三十:ABP.RedisCache

    ABP 通过StackExchange.Redis类库来操作Redis数据库. AbpRedisCacheModule:完成ABP.RedisCache模块的初始化(完成常规的依赖注入) AbpRed ...

  2. ABP源码分析三十八: ABP.Web.Api.OData

    如果对OData不熟悉的话可参考OData的初步认识一文以获取OData的一些初步知识. API.Odata 模块唯一用处就是提供了一个泛型版本的ODataController,实现了Controll ...

  3. ABP源码分析二十六:核心框架中的一些其他功能

    本文是ABP核心项目源码分析的最后一篇,介绍一些前面遗漏的功能 AbpSession AbpSession: 目前这个和CLR的Session没有什么直接的联系.当然可以自定义的去实现IAbpSess ...

  4. ABP源码分析三十四:ABP.Web.Mvc

    ABP.Web.Mvc模块主要完成两个任务: 第一,通过自定义的AbpController抽象基类封装ABP核心模块中的功能,以便利的方式提供给我们创建controller使用. 第二,一些常见的基础 ...

  5. ABP源码分析三十五:ABP中动态WebAPI原理解析

    动态WebAPI应该算是ABP中最Magic的功能之一了吧.开发人员无须定义继承自ApiController的类,只须重用Application Service中的类就可以对外提供WebAPI的功能, ...

  6. ABP源码分析三十二:ABP.SignalR

    Realtime Realtime是ABP底层模块提供的功能,用于管理在线用户.它是使用SignalR实现给在线用户发送通知的功能的前提 IOnlineClient/OnlineClient: 封装在 ...

  7. ABP源码分析三十九:ABP.Hangfire

    ABP对HangFire的集成主要是通过实现IBackgroundJobManager接口的HangfireBackgroundJobManager类完成的. HangfireBackgroundJo ...

  8. ABP源码分析四十六:ABP ZERO中的Ldap模块

    通过AD作为用户认证的数据源.整个管理用户认证逻辑就在LdapAuthenticationSource类中实现. LdapSettingProvider:定义LDAP的setting和提供Defaut ...

  9. ABP源码分析三十一:ABP.AutoMapper

    这个模块封装了Automapper,使其更易于使用. 下图描述了改模块涉及的所有类之间的关系. AutoMapAttribute,AutoMapFromAttribute和AutoMapToAttri ...

随机推荐

  1. 一起来玩echarts系列(一)------箱线图的分析与绘制

    一.箱线图 Box-plot 箱线图一般被用作显示数据分散情况.具体是计算一组数据的中位数.25%分位数.75%分位数.上边界.下边界,来将数据从大到小排列,直观展示数据整体的分布情况. 大部分正常数 ...

  2. 自定义Inspector检视面板

    Unity中的Inspector面板可以显示的属性包括以下两类:(1)C#以及Unity提供的基础类型:(2)自定义类型,并使用[System.Serializable]关键字序列化,比如: [Sys ...

  3. windows+nginx+iis+redis+Task.MainForm构建分布式架构 之 (nginx+iis构建服务集群)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,由标题就能看出此内容不是一篇分享文章能说完的,所以我打算分几篇分享文章来讲解,一步一步实现分 ...

  4. php批量删除

    php批量删除可以实现多条或者全部数据一起删除 新建php文件 显示数据库中内容: <table width="100%" border="1" cell ...

  5. 【算法】(查找你附近的人) GeoHash核心原理解析及代码实现

    本文地址 原文地址 分享提纲: 0. 引子 1. 感性认识GeoHash 2. GeoHash算法的步骤 3. GeoHash Base32编码长度与精度 4. GeoHash算法 5. 使用注意点( ...

  6. 使用Git Bash远程添加分支和简单部署你的静态页面

    新建一个分支:git branch mybranch(mybranch你的分支名字) 切换到你的新分支: git checkout mybranch 将新分支发布在github上: git push ...

  7. SQL中字符串拼接

    1. 概述 在SQL语句中经常需要进行字符串拼接,以sqlserver,oracle,mysql三种数据库为例,因为这三种数据库具有代表性. sqlserver: select '123'+'456' ...

  8. linux下配置matlab运行环境(MCR)

    在安装好的matlab下有MCR(MatlabCompilerRuntime)在matlab2011/toolbox/compiler/deploy/glnxa64下找到MCRInstaller.zi ...

  9. Mono下的WCF的Bug?

    最近一段时间,一直在折腾Mono,折腾Linux.让我无比痛苦的是Mono下的WCF的坑真的是太多了,这不又遇到了一个莫名其妙的问题. 环境:mono 3.2.1,Jexus 5.4.3,OS Cen ...

  10. 无限分级和tree结构数据增删改【提供Demo下载】

    无限分级 很多时候我们不确定等级关系的层级,这个时候就需要用到无限分级了. 说到无限分级,又要扯到递归调用了.(据说频繁递归是很耗性能的),在此我们需要先设计好表机构,用来存储无限分级的数据.当然,以 ...