C# web api 三层架构
一、结构
1、Controllers
xxxxController
2、Services
xxxxService
Impls
IxxxxService
3、Entities
二、配置(Program.cs)
#region 注入依赖 // 注入依赖 DI builder.Services.AddScoped<IPersonService, PersonService>(); #endregion
三、具体代码
1、Controller
using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.AspNetCore.Mvc; using SqlSugar; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Threading.Tasks; using WebApi.Entities; using WebApi.Result; using WebApi.Services.Impls; namespace WebApi.Controllers { /// <summary> /// 测试类人 /// </summary> [ApiController] [Route("test/person")] public class PersonController : ControllerBase { private readonly ILogger _log; private readonly IPersonService _service; /// <summary> /// DI /// </summary> /// <param name="service"></param> /// <param name="log"></param> public PersonController(IPersonService service, ILogger<PersonController> log) { _service = service; _log = log; } /// <summary> /// 新增 /// </summary> /// <param name="person"></param> /// <returns></returns> [HttpPost("add")] public async Task<ApiResult> Post([FromBody] Person person) { await _service.AddAsync(person); return ApiResult.Ok(); } /// <summary> /// 查询 /// </summary> /// <param name="current">当前页码</param> /// <param name="size">页码尺寸</param> /// <param name="name">姓名</param> /// <returns></returns> [HttpGet("list")] public async Task<ApiResult<PagedResult<Person>>> GetList( [FromQuery, Required] int current = 1, [FromQuery, Required] int size = 10, [FromQuery] string? name = null) { PagedResult<Person> list = await _service.ListAsync(current, size, name); _log.LogError("123"); return ApiResult<PagedResult<Person>>.Ok(list); } /// <summary> /// 删除 /// </summary> /// <param name="id">用户id</param> /// <returns></returns> [HttpDelete("delete/{id:int}")] public async Task<ApiResult> delete([FromRoute] int id) { bool flag = await _service.RemoveByIdAsync(id); if (flag) return ApiResult.Ok(); else return ApiResult.Fail(ResultCodeEnum.DataError); } /// <summary> /// 更新 /// </summary> /// <param name="person"></param> /// <returns></returns> [HttpPut("update")] public async Task<ApiResult> update([FromBody] Person person) { bool flag = await _service.UpdateAsync(person); if (flag) return ApiResult.Ok(); else return ApiResult.Fail(ResultCodeEnum.DataError); } /// <summary> /// 根据id获取信息 /// </summary> /// <param name="id">id</param> /// <returns></returns> [HttpGet("getById")] public async Task<ApiResult<Person>> getById([FromQuery] int id) { Person person = await _service.GetByIdAsync(id); if (person != null) return ApiResult<Person>.Ok(person); else return ApiResult<Person>.Fail(ResultCodeEnum.ParamError); } } }
2、IService和Service
IService
using WebApi.Entities; using WebApi.Result; namespace WebApi.Services.Impls { /// <summary> /// 接口 /// </summary> public interface IPersonService { /// <summary> /// 新增 /// </summary> /// <param name="person"></param> /// <returns></returns> Task<bool> AddAsync(Person person); /// 查询/// Task<PagedResult<Person>> ListAsync(int pageIndex, int pageSize, string? name); /// 删除 /// Task<bool> RemoveByIdAsync(int id); Task<bool> UpdateAsync(Person person); Task<Person> GetByIdAsync(int id); } }
Service
using SqlSugar; using System.Runtime.InteropServices; using WebApi.Entities; using WebApi.Exceptions; using WebApi.Result; using WebApi.Services.Impls; namespace WebApi.Services { /// <summary> /// PeersonService /// </summary> public class PersonService : IPersonService { private readonly ISqlSugarClient _db; /// <summary> /// 构造器 DI /// </summary> /// <param name="db"></param> public PersonService(ISqlSugarClient db) { _db = db; } /// <summary> /// 新增 /// </summary> /// <param name="person"></param> /// <returns></returns> /// <exception cref="ApiException"></exception> public async Task<bool> AddAsync(Person person) { bool isExist = await _db.Queryable<Person>().AnyAsync((p)=>p.Name == person.Name); if (isExist) { throw new ApiException(ResultCodeEnum.AdminAccountExistError); } int count = await _db.Insertable(person).ExecuteCommandAsync(); return count > 0; } public async Task<Person> GetByIdAsync(int id) { return await _db.Queryable<Person>().Where(p=>p.Id==id).FirstAsync(); } /// <summary> /// 查询 /// </summary> /// <param name="pageIndex"></param> /// <param name="pageSize"></param> /// <param name="name"></param> /// <returns></returns> public async Task<PagedResult<Person>> ListAsync(int pageIndex, int pageSize, string? name) { RefAsync<int> totalCount = 0; var list = await _db.Queryable<Person>() .WhereIF(!string.IsNullOrEmpty(name), p => p.Name == name) .OrderByDescending(p => p.Id) .ToPageListAsync(pageIndex, pageSize, totalCount); return new PagedResult<Person> { PageIndex = pageIndex, PageSize = pageSize, TotalCount = totalCount, Items = list }; } /// <summary> /// 删除 /// </summary> /// <param name="id"></param> /// <returns></returns> public async Task<bool> RemoveByIdAsync(int id) { return await _db.Deleteable<Person>().Where(p => p.Id == id).IsLogic().ExecuteCommandAsync() >= 1; } /// <summary> /// 更新 /// </summary> /// <param name="person"></param> /// <returns></returns> public async Task<bool> UpdateAsync(Person person) { return await _db.Updateable(person).ExecuteCommandAsync() >= 1; } } }
3、Entity
using SqlSugar; namespace WebApi.Entities { [SugarTable("tb_person")] public class Person : BaseEntity { /// <summary> /// 姓名 /// </summary> public string? Name { get; set; } /// <summary> /// 年龄 /// </summary> public int Age { get; set; } } }

浙公网安备 33010602011771号