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

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

ABP源码分析三十六:ABP.Web.Api-LMLPHP

ABP源码分析三十六:ABP.Web.Api-LMLPHP

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

ABP源码分析三十六:ABP.Web.Api-LMLPHP

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

ABP源码分析三十六:ABP.Web.Api-LMLPHP

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

ABP源码分析三十六:ABP.Web.Api-LMLPHP

ABP源码分析三十六:ABP.Web.Api-LMLPHP

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

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

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

ABP源码分析三十六:ABP.Web.Api-LMLPHP

ABP源码分析三十六:ABP.Web.Api-LMLPHP

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

ABP源码分析三十六:ABP.Web.Api-LMLPHP

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

ClearAllCacheModel : 只有一个password 属性。

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

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

ABP源码分析三十六:ABP.Web.Api-LMLPHP

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

ABP源码分析三十六:ABP.Web.Api-LMLPHP

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

ABP源码分析三十六:ABP.Web.Api-LMLPHP

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

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

ABP源码分析三十六:ABP.Web.Api-LMLPHP

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

ABP源码分析三十六:ABP.Web.Api-LMLPHP

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

ABP源码分析三十六:ABP.Web.Api-LMLPHP

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

05-08 14:50