C#接口设计
基本架构
model 实体
说得通俗一些,model中主要是定义前端传过来的变量以及其类型,或者是需要操作的数据库中的某些字段值。举个例子:
namespace Test.Models.Book
{
public class BookModel
{
public int BookId { get; set; }
public string BookName { get; set; }
public DateTime CreateDate { get; set; }
}
}
其中,上面的namespace是申明一个命名空间,Test表示解决方案,Models是实体文件夹,Book表示实体是Book。申明的每个变量都需要有它的类别以及get和set方法。
controller 控制器层
controller文件中主要定义路由的配置信息,请求方法等。举个例子:
using Test.BLL.Book;
using Test.Models.Book;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
namespace Test.Controllers.Book
{
[Route("api/book/[controller]/[action]")]
[ApiController]
public class Book : Controller
{
// 获取书
[HttpGet]
public async Task<ActionResult> GetBookDetail(int BookId)
{
var res = await bookBll.GetBookDetail(BookId);
return Ok(res)
}
// 添加书
[HttpPost]
public async Task<ActionResult> AddBook([FromBody] BookModel model)
{
var res = await bookBll.AddBook(model);
return Ok(res)
}
}
}
bll 业务逻辑层
bll文件中主要处理各种逻辑。
using Test.DAL.Book;
using Test.Models.Book;
using System.Threading.Tasks;
using System;
using System.Collections.Generic;
namespace Test.BLL.Book
{
public class Book
{
BookDal bookDal = new BookDal();
public async Task<dynamic> GetBookDetail(int BookId)
{
return await bookDal.GetBookDetail(BookId);
}
public async Task AddBook(BookModel model)
{
string BookName = model.BookName;
return await bookDal.AddBook(BookName);
}
}
}
dal 数据操作层
dal文件主要用于数据库的操作。
using Test.BLL;
using Test.Models.Book;
using System.Threading.Tasks;
using System;
using System.Collections.Generic;
namespace Test.DAL.Book
{
public class Book
{
public async Task<dynamic> GetBookDetail(int BookId)
{
IDbConnection conn = SqlUtil.SqlConnection(ConfigUtil.GetSysSettings().Book);
string sql = @"SELECT * FROM book WHERE bookId = @bookId"
await SqlUtil.QueryAsync<dynamic>(sql, new { bookName }, connection: conn);
}
public async Task AddBook(string BookName)
{
IDbConnection conn = SqlUtil.SqlConnection(ConfigUtil.GetSysSettings().Book);
string sql = @"INSERT INTO book(bookId,bookName,createDate) values(@bookId,@bookName,GETDATE())"
await SqlUtil.ExecuteAsync(sql, new { bookName }, connection: conn);
}
}
}
前端调用方式
src下的service文件夹的book.js
export async function getBookDetail(params) {
return request(`${SERVICE_BASE}/api/Book/GetBookDetail`, {
method: 'GET',
params
});
}
export async function addBook(params) {
return request(`${SERVICE_BASE}/api/Book/AddBook`, {
method: 'POST',
body: params
});
}
import React, { useEffect } from 'react';
import * as service from '@/services/book';
function book(){
useEffect(() => {
service.getBookDetail({bookId: 1}).then(res=>{
if (res.errorCode == 0) {
console.log(res)
}
})
service.addBook({bookName: "格列夫游记"}).then(res=>{
if (res.errorCode == 0) {
console.log(res)
}
})
})
}
C#接口设计的更多相关文章
- 数据仓储之DLL层接口设计
一.接口设计 1.1. IBaseRepository.cs public interface IBaseRepository<T> { T Add(T entity); bool Upd ...
- RESTful接口设计原则/最佳实践(学习笔记)
RESTful接口设计原则/最佳实践(学习笔记) 原文地址:http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api 1 ...
- Web API接口设计经验总结
在Web API接口的开发过程中,我们可能会碰到各种各样的问题,我在前面两篇随笔<Web API应用架构在Winform混合框架中的应用(1)>.<Web API应用架构在Winfo ...
- Verilog学习笔记简单功能实现(七)...............接口设计(并行输入串行输出)
利用状态机实现比较复杂的接口设计: 这是一个将并行数据转换为串行输出的变换器,利用双向总线输出.这是由EEPROM读写器的缩减得到的,首先对I2C总线特征介绍: I2C总线(inter integra ...
- 优秀的API接口设计原则及方法(转)
一旦API发生变化,就可能对相关的调用者带来巨大的代价,用户需要排查所有调用的代码,需要调整所有与之相关的部分,这些工作对他们来说都是额外的.如果辛辛苦苦完成这些以后,还发现了相关的bug,那对用户的 ...
- atitit.基于http json api 接口设计 最佳实践 总结o7
atitit.基于http json api 接口设计 最佳实践 总结o7 1. 需求:::服务器and android 端接口通讯 2 2. 接口开发的要点 2 2.1. 普通参数 meth,p ...
- App接口设计
关于APP接口设计 http://blog.csdn.net/gebitan505/article/details/37924711/
- App接口设计原则-b
1.记住密码不是真的让你记住密码,这里仅仅指的是一种自动登录的手段.不管在任何地方,明文存储的密码都是安全隐患,是必须尽量避免的.你可以采用某种方式对用户名.密码以及时间戳(重要)进行签名,再次登录时 ...
- 蓝牙(BLE)应用框架接口设计和应用开发——以TI CC2541为例
本文从功能需求的角度分析一般蓝牙BLE单芯片的应用框架(SDK Framework)的接口设计过程,并以TI CC2541为例说明BLE的应用开发方法. 一.应用框架(Framework) 我们熟知的 ...
- Spring+SpringMVC+MyBatis+easyUI整合进阶篇(二)RESTful API实战笔记(接口设计及Java后端实现)
写在前面的话 原计划这部分代码的更新也是上传到ssm-demo仓库中,因为如下原因并没有这么做: 有些使用了该项目的朋友建议重新创建一个仓库,因为原来仓库中的项目太多,结构多少有些乱糟糟的. 而且这次 ...
随机推荐
- Vue3 组合式 API 中获取 DOM 节点的问题
模板引用 Vue 提供了许多指令让我们可以直接操作组件的模板.但是在某些情况下,我们仍然需要访问底层 DOM 元素.在模板中添加一个特殊的属性ref就可以得到该元素. 访问模板引用 <scrip ...
- Qt 创建按钮动画
1 封装自定义按钮 myPushBttton 2 构造函数 (默认图片,按下后显示图片) 3 测试开始按钮 4 开始制作特效 5 zoom1 向下弹跳 6 zoom2 向上弹跳 代码如下 main.h ...
- java代码审计的点
java代码审计的点 组件的审计 首先看pom.xml查看第三方组件和第三方组件的版本 常用的第三方组件: 第三方组件 漏洞类型 组件漏洞版本 log4j2 远程代码执行 Apache log4j2 ...
- Elasticsearch7.6.2 RestHighLevelClient查询用法 must should(and or 关系)
1. 引入jar <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId&g ...
- mpdf导出pdf,中文符号乱码
改源码: 打开vendor/mpdf/mpdf/src/Config/FontVariables.php 在最后一行加入: "gb" => [ 'R' => 'gb.t ...
- 8.第七篇 验证kube-apiserver及kubeconfig配置详解
文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247483818&idx=1&sn=7572b791 ...
- 解决zeal离线文档下载慢问题
zeal简介 编程过程中难免会遇到不会用的关键字和方法,对我而言,在windows下,我使用Zeal这个软件进行离线文档查询. 问题 但是,在软件中下载DocSet(文档)会出现下载慢,或者下载不了的 ...
- Elasticsearch 架构解析与最佳实践
文章转载自:https://mp.weixin.qq.com/s/7pWNsUYbM4NyubZO6M3P5g
- 2>&1到底是什么意思?
java -jar snapshot.jar > snapshot.log 2>&1 & 写Java的朋友一定对上面的命令很熟悉,相信大部分人都知道>表示的是重定向, ...
- MySQL数据库安装保姆教程及问题解决
使用Mysql的zip压缩包解压版,下载之后需进行一定的配置,才能使用它. 下面对Mysql压缩包版的安装方法进行详细的描述,如有疑问或错误,望及时反馈. 首先,mysql的官方下载地址点我进行下载 ...