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.rhkb.cn/news/82124.html

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

相关文章

【Fegin技术专题】「原生态」打开Fegin之RPC技术的开端,你会使用原生态的Fegin吗?(中)

你可以使用 Jersey 和 CXF 这些来写一个 Rest 或 SOAP 服务的java客服端。 你也可以直接使用 Apache HttpClient 来实现。但是 Feign 的目的是尽量的减少资源和代码来实现和 HTTP API 的连接。 *通过自定义的编码解码器以及错误处理&#xff0c;你可以编写任何基于文本的 HTT…

python数据分析 期末测验,python数据分析基础题库

大家好&#xff0c;小编为大家解答python数据分析选择题题目的问题。很多人还不知道python数据分析题目和答案&#xff0c;现在让我们一起来看看吧&#xff01; 自测试卷 5 一、选择题 1 &#xff0e;下面关于 RFM 模型说法正确的是&#xff08; &#xff09;。 A &#xff0e;…

现代C++中的从头开始深度学习【2/8】:张量编程

一、说明 初学者文本&#xff1a;此文本需要入门级编程背景和对机器学习的基本了解。张量是在深度学习算法中表示数据的主要方式。它们广泛用于在算法执行期间实现输入、输出、参数和内部状态。 在这个故事中&#xff0c;我们将学习如何使用特征张量 API 来开发我们的C算法。具…

gradle 命令行单元测试执行问题

文章目录 问题&#xff1a;命令行 执行失败最终解决方案&#xff08;1&#xff09;ADB命令&#xff08;2&#xff09;Java 环境配置 问题&#xff1a;命令行 执行失败 命令行 执行测试命令 无法使用&#xff08;之前还能用的。没有任何改动&#xff0c;又不能用了&#xff09; …

Learning Rich Features for Image Manipulation Detection阅读笔记

文章目录 Abstract3.3. 双线性池 Abstract 图像篡改检测与传统的语义目标检测&#xff08;semantic object detection&#xff09;不同&#xff0c;因为它更关注篡改伪影&#xff08;tampering artifacts&#xff09;而不是图像内容&#xff0c;这表明需要学习更丰富的特征。我…

微服务架构基础--第3章Spring Boot核心功能讲解

第3章Spring Boot核心功能讲解 一.预习笔记 1.使用maven创建SpringBoot项目 1-1:创建一个maven项目 1-2:在pom文件中导入依赖 1-3&#xff1a;编写启动类&#xff08;注意启动类的位置&#xff09; 1-4&#xff1a;编写测试类 1-5&#xff1a;运行SpringBoot启动类 2.了解p…

JPA实现存储实体类型信息

本文已收录于专栏 《Java》 目录 背景介绍概念说明DiscriminatorValue 注解&#xff1a;DiscriminatorColumn 注解&#xff1a;Inheritance(strategy InheritanceType.SINGLE_TABLE) 注解&#xff1a; 实现方式父类子类执行效果 总结提升 背景介绍 在我们项目开发的过程中经常…

大模型AI人才培养研习会,上海、武汉站同期招募!

伴随预训练大语言模型技术引发的产业变革&#xff0c;市场对AI人才需求也同样发生着深刻变化&#xff0c;教育迎来了新的机遇与挑战。由中国自动化学会主办&#xff0c;百度公司联合知名高校承办的大模型AI人才培养研习会&#xff0c;首场将于8月19日在武汉、上海双城同期举办&…

flutter-GridView使用

先看效果 代码实现 import package:app/common/util/k_log_util.dart; import package:app/gen/assets.gen.dart; import package:app/pages/widget/top_appbar.dart; import package:flutter/cupertino.dart; import package:flutter/material.dart; import package:flutter_…

iOS 实现图片高斯模糊效果

效果图 用到了 UIVisualEffectView 实现代码 - (UIVisualEffectView *)bgEffectView{if(!_bgEffectView){UIBlurEffect *blur [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];_bgEffectView [[UIVisualEffectView alloc] initWithEffect:blur];}return _bgEffect…

吃瓜教程-Task05

目录 支持向量机 间隔与支持向量 SVM基本型 对偶问题 kkt条件 例子 对偶问题 例子 对偶问题原理解释 软间隔与正则化 替代损失函数 支持向量回归 例子 支持向量机 间隔与支持向量 在样本空间中&#xff0c;划分超平面可通过如下线性方程来描述: 样本空间中任意点x到…

在软件测试中,如何有效地跟踪和管理缺陷?

在软件测试中&#xff0c;跟踪和管理缺陷是非常重要的&#xff0c;因为这有助于确保所有问题得到妥善处理&#xff0c;避免在产品发布后出现问题。以下是跟踪和管理缺陷的一些有效方法&#xff1a; 1.创建缺陷报告&#xff1a;当发现一个缺陷时&#xff0c;应该立即创建一个缺…

无涯教程-Perl - binmode函数

描述 此函数设置在区分两者的操作系统上以二进制形式读取和写入FILEHANDLE的格式。非二进制文件的CR LF序列在输入时转换为LF,在LF时在输出时转换为CR LF。这对于使用两个字符分隔文本文件中的行的操作系统(MS-DOS)至关重要,但对使用单个字符的操作系统(Unix,Mac OS,QNX)没有影…

《合成孔径雷达成像算法与实现》Figure3.4

代码对补零信号与未补零信号都进行了实现&#xff0c;补零信号更加贴近书中图3.4的样子&#xff1a; clc clear all close all%参数设置 TBP 100; %时间带宽积 T 10e-6; %脉冲持续时间 alpha_os [1.4,1.2,1.0,0…

电脑开不了机如何解锁BitLocker硬盘锁

事情从这里说起&#xff0c;不想看直接跳过 早上闲着无聊&#xff0c;闲着没事干&#xff0c;将win11的用户名称改成了含有中文字符的用户名&#xff0c;然后恐怖的事情发生了&#xff0c;蓝屏了… 然后就是蓝屏收集错误信息&#xff0c;重启&#xff0c;蓝屏收集错误信息&…

可靠传输概述——停止-等待协议

基本概念&#xff1a; 使用差错检测技术&#xff08;例如循环冗余校验CRC&#xff09;&#xff0c;接收方的数据链路层就可检测出帧在传输过程中是否出现了误码。 此时有&#xff1a; 不可靠传输服务&#xff1a;仅仅丢弃有误码的帧&#xff0c;其他什么也不做 可靠传输服务&a…

IDEA常用插件介绍

1.CodeGlance&#xff08;CodeGlance Pro&#xff09; 安装后&#xff0c;重新启动编译器即可。 CodeGlance是一款非常好用的代码地图插件&#xff0c;可以在代码编辑区的右侧生成一个竖向可拖动的代码缩略区&#xff0c;可以快速定位代码的同时&#xff0c;并且提供放大镜功能…

JVM 学习—— 类加载机制

前言 在上一篇文章中&#xff0c;荔枝梳理了有关Java中JVM体系架构的相关知识&#xff0c;其中涉及到的有关Java类加载机制的相关知识并没有过多描述。那么在这篇文章中&#xff0c;荔枝会详细梳理一下有关JVM的类加载机制和双亲委派模型的知识&#xff0c;希望能够帮助到有需要…

Protues如何安装下载使用:STM32利用Protues进行仿真

文章目录&#xff1a; 一&#xff1a;Proteus仿真的使用步骤 第一步&#xff1a;Proteus新建项目 第二步&#xff1a;Proteus设计电路图&#xff08;选取元器件、摆放元器件、编辑元器件属性、原理图布线&#xff09; 第三步&#xff1a;程序代码编写 第四步&#xff1a;…

Visual Studio 2022安装

Visual Studio下载网址