ABP源码分析三十六:ABP.Web.Api
这里的内容和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.Web.Api的更多相关文章
- ABP源码分析三十:ABP.RedisCache
ABP 通过StackExchange.Redis类库来操作Redis数据库. AbpRedisCacheModule:完成ABP.RedisCache模块的初始化(完成常规的依赖注入) AbpRed ...
- ABP源码分析三十八: ABP.Web.Api.OData
如果对OData不熟悉的话可参考OData的初步认识一文以获取OData的一些初步知识. API.Odata 模块唯一用处就是提供了一个泛型版本的ODataController,实现了Controll ...
- ABP源码分析二十六:核心框架中的一些其他功能
本文是ABP核心项目源码分析的最后一篇,介绍一些前面遗漏的功能 AbpSession AbpSession: 目前这个和CLR的Session没有什么直接的联系.当然可以自定义的去实现IAbpSess ...
- ABP源码分析三十四:ABP.Web.Mvc
ABP.Web.Mvc模块主要完成两个任务: 第一,通过自定义的AbpController抽象基类封装ABP核心模块中的功能,以便利的方式提供给我们创建controller使用. 第二,一些常见的基础 ...
- ABP源码分析三十五:ABP中动态WebAPI原理解析
动态WebAPI应该算是ABP中最Magic的功能之一了吧.开发人员无须定义继承自ApiController的类,只须重用Application Service中的类就可以对外提供WebAPI的功能, ...
- ABP源码分析三十二:ABP.SignalR
Realtime Realtime是ABP底层模块提供的功能,用于管理在线用户.它是使用SignalR实现给在线用户发送通知的功能的前提 IOnlineClient/OnlineClient: 封装在 ...
- ABP源码分析三十九:ABP.Hangfire
ABP对HangFire的集成主要是通过实现IBackgroundJobManager接口的HangfireBackgroundJobManager类完成的. HangfireBackgroundJo ...
- ABP源码分析四十六:ABP ZERO中的Ldap模块
通过AD作为用户认证的数据源.整个管理用户认证逻辑就在LdapAuthenticationSource类中实现. LdapSettingProvider:定义LDAP的setting和提供Defaut ...
- ABP源码分析三十一:ABP.AutoMapper
这个模块封装了Automapper,使其更易于使用. 下图描述了改模块涉及的所有类之间的关系. AutoMapAttribute,AutoMapFromAttribute和AutoMapToAttri ...
随机推荐
- 一次修改闭源 Entity Provider 程序集以兼容新 EntityFramework 的过程
读完本文你会知道,如何在没有源码的情况下,直接修改一个 DLL 以去除 DLL 上的强命名限制,并在该程序集上直接添加你的“友元程序集(一种特殊的 Attribute,将它应用在程序集上,使得程序集内 ...
- JS里面Data日期格式转换
var format = function(time, format){ var t = new Date(time); var tf = function(i){return (i ...
- CoreCRM 开发实录——开始之新项目的技术选择
2016年11月,接受了一个工作,是对"悟空CRM"进行一些修补.这是一个不错的 CRM,开源,并提供一个 SaaS 的服务.正好微软的 .NET Core 和 ASP.NET C ...
- 谱聚类(spectral clustering)原理总结
谱聚类(spectral clustering)是广泛使用的聚类算法,比起传统的K-Means算法,谱聚类对数据分布的适应性更强,聚类效果也很优秀,同时聚类的计算量也小很多,更加难能可贵的是实现起来也 ...
- 在.NET Core之前,实现.Net跨平台之Mono+CentOS+Jexus初体验
准备工作 本篇文章采用Mono+CentOS+Jexus的方式实现部署.Net的Web应用程序(实战,上线项目). 不懂Mono的请移步张善友大神的:国内 Mono 相关文章汇总 不懂Jexus为何物 ...
- 【读书】PHP程序员要读的书目(不断完善中)
本文地址 分享提纲: 1. PHP 2. Linux 3. Apache/Nginx 4. Mysql 5.设计模式/架构 6. 缓存并发 7. 其他语言 8. 代码基础 9. 大前端 10. 管理生 ...
- arcgis api for js入门开发系列四地图查询(含源代码)
备注:由于实现本篇功能的需求,修改了地图数据的dlsearch.mxd,然后更新了地图服务,需要的在文章最后有提供最新的mxd以及源代码下载的 上一篇实现了demo的地图工具栏,本篇新增地图查询功能, ...
- H3 BPM引擎API接口
引擎API接口通过 Engine 对象进行访问,这个是唯一入口. 示例1:获取组织机构对象 this.Engine.Organization.GetUnit("组织ID"); 示例 ...
- .net core和angular2之前端篇—1
2016-10-20更新 今天的这篇文章还是一篇"Hello World",只不过开发环境有所改变--Visual Studio Code+Angular2+Webapck,也算是 ...
- Firebug中调试中的js脚本中中文内容显示为乱码
Firebug中调试中的js脚本中中文内容显示为乱码 设置 页面 UFT-8 编码没用, 解决方法:点击 "Firebug"工具栏 中的"选项"---" ...