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仓库中,因为如下原因并没有这么做: 有些使用了该项目的朋友建议重新创建一个仓库,因为原来仓库中的项目太多,结构多少有些乱糟糟的. 而且这次 ...
随机推荐
- 在微信小程序中,如何获取 for 循环的 index
微信小程序中,for 循环的 index(索引值)可以用wx:for-index="index"来获取. <view class="item" wx:fo ...
- SSM整合,快速新建javaWeb项目
整合前需要了解: spring和springmvc包扫描的注意事项 Spring applicationContext.xml (父容器),SpringMVC springmvc-servlet.xm ...
- docker 容器terminal失败
关键一句话:docker 容器的teminal失败,一定是等待资源导致的,不管是pid资源,还是内存资源.本文主要讲因为内存资源导致进程D状态,然后导致teminal容器失败. 目前在集群中,cpu占 ...
- 轻松月薪过万,NISP证书含金量有多重|NISP管理中心|网安伴|nisp
nisp一级证书含金量 NISP一级证书是面向各个行业工作人员信息安全意识普及化和网络信息安全基础培训的国家级验证.持NISP一级证书可以从信息安全保密较高的单位得到加分.证书由中国信息安全测评中心授 ...
- Typora多线程批量上传图片,永久免费25G图床
为了满足日常需求,就写了一个自动上传图片到图床的脚本 运行该程序可以做到自动完成图片上传,并自动替换为网络链接,支持多图同时上传,采用了多线程,上传速度提升很明显. 以Window系统为例,操作步骤: ...
- fastadmin后台分页设置显示方法
1.参照日志列表的分页(后台代码都有) 2.修改默认分页配置,在初始化里面加上: pageList: [5,10,'all'], 3.显示列表: [$where, $sort, $order, $ ...
- 纯CSS实现“流星赶月”,祝大家中秋节快乐
明天就是中秋节了,就想着用CSS画一个月亮送给园友们吧.但是就画一个月亮也太简单了些,于是便加了一些星星点缀以及流星坠落的效果.这篇文章就用纯CSS为大家实现一个"流星赶月"的效果 ...
- java的URI和URL的关系
java的URI和URL到底是什么 在我们做开发时,经常有URI和URL弄混的问题,如果当时直接看URI和URL的源码就不可能弄混.首先我总结一下URI和URL的关系:他们的关系是:URL是一种特殊的 ...
- Kubernetes实践技巧:资源预留
ubernetes 的节点可以按照节点的资源容量进行调度,默认情况下 Pod 能够使用节点全部可用容量.这样就会造成一个问题,因为节点自己通常运行了不少驱动 OS 和 Kubernetes 的系统守护 ...
- MySQL的EXPLAIN会修改数据测试
文章转载自:https://www.cnblogs.com/kerrycode/p/14138626.html 在博客"Explain命令可能会修改MySQL数据"了解到MySQL ...