在ABP VNext框架中,HttpApi项目是我们作为Restful格式的控制器对象的封装项目,但往往很多案例都是简单的继承基类控制器AbpControllerBase,而需要在每个控制器里面重写很多类似的Create/Update/Delete/Get/GetList等常规Restful接口的调用,千篇一律的重复,本篇随笔介绍如何对这些内容通过基类的方式实现,子类无需重复代码,并且强类型所有的接口实现。
1、Restful接口的CRUD实现
在我们使用HttpApi项目进一步封装ABP VNext框架的Application项目中的应用服务,作为Restful格式的控制器对象,往往都需要实现基本的Create/Update/Delete/Get/GetList等常规Restful接口的实现调用,官方很多案例也都是把这部分代码进行重复在重复,如下所示。
例如对于客户对象Customer的HttpApi项目控制器的代码如下:
/// <summary> /// 客户信息控制器 /// </summary> //[Area("crm")] [RemoteService] [ControllerName("Customer")] [Route("api/customer")] public class CustomerController : AbpControllerBase, ICustomerAppService { private readonly ICustomerAppService _customerAppService; public CustomerController(ICustomerAppService customerAppService) { _customerAppService = customerAppService; } /// <summary> /// 创建对象 /// </summary> [HttpPost] public Task<CustomerDto> CreateAsync(CreateCustomerDto input) { return _customerAppService.CreateAsync(input); } /// <summary> /// 删除对象 /// </summary> /// <param name="id"></param> /// <returns></returns> [HttpDelete] [Route("{id}")] public Task DeleteAsync(string id) { return _customerAppService.DeleteAsync(id); } /// <summary> /// 根据ID获取指定对象 /// </summary> /// <param name="id"></param> /// <returns></returns> [HttpGet] [Route("{id}")] public Task<CustomerDto> GetAsync(string id) { return _customerAppService.GetAsync(id); } /// <summary> /// 分页获取列表记录 /// </summary> /// <param name="input"></param> /// <returns></returns> [HttpGet] public Task<PagedResultDto<CustomerDto>> GetListAsync(CustomerPagedDto input) { return _customerAppService.GetListAsync(input); } /// <summary> /// 更新对象 /// </summary> [HttpPut] [Route("{id}")] public Task<CustomerDto> UpdateAsync(string id, CustomerDto input) { return _customerAppService.UpdateAsync(id, input); } /// <summary> /// 获取字段列别名 /// </summary> /// <returns></returns> [HttpGet] [Route("columnalias")] public Task<Dictionary<string, string>> GetColumnNameAlias() { return _customerAppService.GetColumnNameAlias(); } }
12-31 16:29