自动API控制器
ABP可以按照惯例 自动 将你的应用程序服务配置为API控制器. 大多数时候你不关心它的详细配置,但它可以完全被自定义.
基本配置很简单. 只需配置并使用ConventionalControllers.Create
方法,如下所示:
此示例代码配置包含类BookStoreApplicationModule
的程序集中的所有应用程序服务.下图显示了Swagger UI上的API内容.
一些示例方法名称和按约定生成的相应路由:
HTTP Method
- Get: 如果方法名称以
GetList
,GetAll
或Get
开头. - Put: 如果方法名称以
Put
或Update
开头. - Delete: 如果方法名称以
Delete
或Remove
开头. - Post: 如果方法名称以
Create
,Add
,Insert
或Post
开头. - Patch: 如果方法名称以
Patch
开头. - 其他情况, Post 为 默认方式.
如果需要为特定方法自定义HTTP Method, 则可以使用标准ASP.NET Core的属性([HttpPost], [HttpGet], [HttpPut]… 等等.). 这需要添加的Nuget包.
路由根据一些惯例生成:
- 它始终以 /api开头.
- 接着是路由路径. 默认值为”/app“, 可以进行如下配置:
然后获得一本书的路由将是’/api/volosoft/book-store/book/{id}‘. 此示例使用两级根路径,但通常使用单个级别的深度.
- 如果该方法具有 ‘id‘参数, 则会在路由中添加’/{id}‘.
- 如有必要,它会添加操作名称. 操作名称从服务上的方法名称获取并标准化;
- 删除’Async‘后缀. 如果方法名称为’GetPhonesAsync’,则变为
GetPhones
. - 删除HTTP method前缀. 基于的HTTP method删除
GetList
,GetAll
,Get
,Put
,Update
,Delete
,Remove
,Create
,Add
,Insert
,和Patch
前缀, 因此GetPhones
变为Phones
, 因为Get
前缀和GET请求重复. - 将结果转换为camelCase.
- 如果生成的操作名称为空,则它不会添加到路径中.否则它会被添加到路由中(例如’/phones’).对于
GetAllAsync
方法名称,它将为空,因为GetPhonesAsync
方法名称将为phone
. - 可以通过设置
UrlActionNameNormalizer
选项来自定义.It’s an action delegate that is called for every method.
- 删除’Async‘后缀. 如果方法名称为’GetPhonesAsync’,则变为
创建的HTTP API控制器并不是应用服务所独有的功能.
IRemoteService 接口
如果一个类实现了IRemoteService
接口, 那么它会被自动选择为API控制器. 由于应用程序服务本身实现了IRemoteService
接口, 因此它自然就成为API控制器.
TypePredicate 选项
你可以通过提供TypePedicate
选项进一步过滤类以成为API控制器:
如果你不想将此类型公开为API控制器, 则可以在类型检查时返回false
.
API Explorer是可以由客户端获取API结构的服务. Swagger使用它为endpoint创建文档和test UI.
默认情况下, HTTP API控制器会自动启用API Explorer, 可以使用RemoteService
按类或方法的级别控制它. 例如:
禁用从而从API Explorer中隐藏此服务, 并且无法被发现. 但是它仍然可以被知道确切API路径/路由的客户端使用.