WPF实战项目十一(API篇):待办事项功能api接口

1、新建ToDoController.cs继承基础控制器BaseApiController,但是一般业务代码不写在控制器内,业务代码写在Service,先新建统一返回值格式ApiResponse.cs:

public class ApiResponse{public ApiResponse(bool status, string messages = ""){this.Message = messages;this.Status = status;}public ApiResponse(bool status, object result){this.Status = status;this.Result = result;}/// <summary>/// 后台消息/// </summary>public string Message { get; set; }/// <summary>/// 返回状态/// </summary>public bool Status { get; set; }/// <summary>/// 返回结果/// </summary>public object Result { get; set; }}

2、新建基础Service接口:IBaseService.cs,包含CRUD方法:

public interface IBaseService<T>{Task<ApiResponse> GetAllAsync();Task<ApiResponse> GetSingleAsync(int id);Task<ApiResponse> AddEntityAsync(T model);Task<ApiResponse> UpdateEntityAsync(T model);Task<ApiResponse> DeleteEntityAsync(int id);}

3、新建待办事项接口IToDoService.cs,继承IBaseService

public interface IToDoService : IBaseService<ToDo>{}

4、新建实现类ToDoService.cs,继承IToDoService.cs

public class ToDoService : IToDoService{private readonly IUnitOfWork unitOfWork;public ToDoService(IUnitOfWork unitOfWork){this.unitOfWork = unitOfWork;}/// <summary>/// 新增待办事项/// </summary>/// <param name="model"></param>/// <returns></returns>public async Task<ApiResponse> AddEntityAsync(ToDo model){try{await unitOfWork.GetRepository<ToDo>().InsertAsync(model);if(await unitOfWork.SaveChangesAsync() > 0){return new ApiResponse(true, model);}else{return new ApiResponse(false, "添加数据失败!");}}catch (Exception ex){return new ApiResponse(false, ex.Message);}}/// <summary>/// 删除待办事项/// </summary>/// <param name="id"></param>/// <returns></returns>public async Task<ApiResponse> DeleteEntityAsync(int id){try{var repository = unitOfWork.GetRepository<ToDo>();var todo = await repository.GetFirstOrDefaultAsync(predicate: t => t.Id.Equals(id));repository.Delete(todo);if (await unitOfWork.SaveChangesAsync() > 0){return new ApiResponse(true, "删除数据成功!");}else{return new ApiResponse(false, "删除数据失败!");}}catch (Exception ex){return new ApiResponse(false, ex.Message);}}/// <summary>/// 查询所有数据/// </summary>/// <returns></returns>public async Task<ApiResponse> GetAllAsync(){try{var repository = unitOfWork.GetRepository<ToDo>();var todo = await repository.GetAllAsync();if (todo != null){return new ApiResponse(true, todo);}else{return new ApiResponse(false, "查询数据失败!");}}catch (Exception ex){return new ApiResponse(false, ex.Message);}}/// <summary>/// 根据Id查询数据/// </summary>/// <param name="id"></param>/// <returns></returns>public async Task<ApiResponse> GetSingleAsync(int id){try{var repository = unitOfWork.GetRepository<ToDo>();var todo = await repository.GetFirstOrDefaultAsync(predicate: t => t.Id.Equals(id));if (todo != null){return new ApiResponse(true, todo);}else{return new ApiResponse(false, $"未查询到Id={id}的数据!");}}catch (Exception ex){return new ApiResponse(false, ex.Message);}}/// <summary>/// 更新数据/// </summary>/// <param name="model"></param>/// <returns></returns>/// <exception cref="NotImplementedException"></exception>public async Task<ApiResponse> UpdateEntityAsync(ToDo model){try{var repository = unitOfWork.GetRepository<ToDo>();var todo = await repository.GetFirstOrDefaultAsync(predicate: t => t.Id.Equals(model.Id));if (todo != null){todo.Title = model.Title;todo.Content = model.Content;todo.Status = model.Status;todo.UpdateDate = DateTime.Now;repository.Update(todo);if(await unitOfWork.SaveChangesAsync() > 0){return new ApiResponse(true, "更新数据成功!");}else{return new ApiResponse(true, "更新数据失败!");}}else{return new ApiResponse(false, $"未查询到Id={model.Id}的数据!");}}catch (Exception ex){return new ApiResponse(false, ex.Message);}}}

5、program.cs里面注入服务

builder.Services.AddTransient<IToDoService, ToDoService>();

6、ToDoController.cs里面依赖注入IUnitOfWork和IToDoService,并添加CURD的代码

public class ToDoController : BaseApiController{private readonly IUnitOfWork unitOfWork;private readonly IToDoService toDoService;public ToDoController(IUnitOfWork unitOfWork, IToDoService toDoService){this.unitOfWork = unitOfWork;this.toDoService = toDoService;}[HttpGet]public async Task<ApiResponse> GetToDoById(int Id){return await toDoService.GetSingleAsync(Id);}[HttpGet]public async Task<ApiResponse> GetAllToDo(){return await toDoService.GetAllAsync();}[HttpPost]public async Task<ApiResponse> AddToDo([FromBody] ToDo toDo){return await toDoService.AddEntityAsync(toDo);}[HttpDelete]public async Task<ApiResponse> DeleteToDo(int id){return await toDoService.DeleteEntityAsync(id);}[HttpPost]public async Task<ApiResponse> UpdateToDo(ToDo toDo){return await toDoService.UpdateEntityAsync(toDo);}}

7、F5运行项目

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/60218.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ssm学院党员管理系统源码和论文PPT

ssm学院党员管理系统源码和论文PPT002 开发工具&#xff1a;idea 数据库mysql5.7(mysql5.7最佳) 数据库链接工具&#xff1a;navcat,小海豚等 开发技术&#xff1a;java ssm tomcat8.5 选题意义、价值和目标&#xff1a; 随着鄂尔多斯应用技术学院招生规模的不断扩大&…

Git仓关联多个远程仓路径

前言 Git仓如果需要将代码push到多个仓&#xff0c;常用的做法是添加多个远程仓路径&#xff0c;然后分别push。这样虽然可以实现目的&#xff0c;但是需要多次执行push指令&#xff0c;很麻烦。 本文介绍关联多个远程仓路径且执行一次push指令的方法&#xff1a;git remote …

Linux操作系统(二):操作系统结构与内核设计

在&#xff08;一&#xff09;详解CPU中介绍了操作系统所基于的硬件CPU后&#xff0c;本部分学习操作系统的架构。在计算机系统中&#xff0c;操作系统的架构通常包括以下几个主要组件&#xff1a; 内核&#xff08;Kernel&#xff09; 进程管理&#xff08;Process Management…

把大模型装进手机,分几步?

点击关注 文 | 姚 悦 编 | 王一粟 大模型“跑”进手机&#xff0c;AI的战火已经从“云端”烧至“移动终端”。 “进入AI时代&#xff0c;华为盘古大模型将会来助力鸿蒙生态。”8月4日&#xff0c;华为常务董事、终端BG CEO、智能汽车解决方案BU CEO 余承东介绍&#xff0c…

数字化管理,让MRO工业品更高效

MRO商品数字化是将MRO商品的采购、库存及记录过程进行数字化管理&#xff0c;以提高MRO商品的效率和可控性。MRO&#xff08;Maintenance, Repair and Operations&#xff09;一般用于维修、保养及日常运营工作中&#xff0c;包括五金工具、紧固件、精加工刀具、备品备件、切屑…

【一】初步认识数据库

数据库概览数据库 缘起表(Table)的理解用表来定义数据库数据库系统的理解概念层次的理解实例层次的理解 数据库管理系统的理解从用户角度看从系统实现角度看典型的数据库管理系统 数据库语言数据库定义、操纵、控制语言数据库语言 VS 高级语言 内容回顾练习 数据库概览 走马观…

Jmeter +Maven+jenkins 接口性能全自动化测试

背景&#xff1a; 首先用jmeter录制或者书写性能测试的脚本&#xff0c;用maven添加相关依赖&#xff0c;把性能测试的代码提交到github&#xff0c;在jenkins配置git下载性能测试的代码&#xff0c;配置运行脚本和测试报告&#xff0c;配置运行失败自动发邮件通知&#xff0c…

浪潮数字咨询专家孙崇虎受邀为第十二届中国PMO大会演讲嘉宾

浪潮数字企业技术有限公司集团管控事业部咨询专家孙崇虎先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;VUCA时代的项目管理信息化应对。大会将于8月12-13日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1a; 当前…

NGINX组件(rewrite)

一、location匹配的规则和优先级&#xff08;*&#xff09; URI&#xff1a;统一资源标识符&#xff0c;是一种字符串标识&#xff0c;用于标识抽象的或者是物理资源&#xff1b;如&#xff1a;文件、图片、视频等 nginx中的URI匹配的是&#xff1a;网址”/“后的路径 如&…

10分钟学会阿里OSS对象存储

一. 前言 最近有很多小伙伴问&#xff0c;如果我们要进行大规模的文件存储该怎么做? 其实实现文件存储的技术有很多&#xff0c;如果我们在网上搜索一下&#xff0c;你会发现实现的技术简直是五花八门&#xff0c;比如有一种技术叫FastDFS就可以实现文件存储&#xff0c;但该…

IoT 物联网安全事件的持续检测和监控解决方案

对于IoT物联网安全事件的持续检测和监控&#xff0c;可以采用以下解决方案&#xff1a; 设备管理和漏洞修复&#xff1a;确保设备的固件和软件及时更新&#xff0c;并修补已知的漏洞。建立一个设备清单&#xff0c;并定期审查和更新其中的设备。 流量分析和异常检测&#xff1a…

matplotlib 笔记:基本用法

1 axis 1.0 对比原始图像 import numpy as np import matplotlib.pyplot as plt xrange(5) yrange(10,20,2) plt.plot(x,y) 1.1 plt.axis(equal) x轴和y轴单位长度相同 import numpy as np import matplotlib.pyplot as plt plt.axis(equal) xrange(5) yrange(10,20,2) pl…