net core体系-API-Restful+Swagger搭建API
本篇主要简单介绍下.net core下搭建WebApi
项目结构
项目结构其实不用多说,基本上大同小异。
- Controller:对外暴露的契约
- Business/IBussiness:业务逻辑层实现及接口
- DataAccess:数据访问层
- Model:实体类库
- Common:公共方法类库
Swagger
Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件。本文简单介绍了在项目中集成swagger的方法和一些常见问题。如果想深入分析项目源码,了解更多内容,见参考资料。
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。Swagger 让部署管理和使用功能强大的API从未如此简单。
官网:http://swagger.io/
Swagger集成
首先通过NuGet
加载依赖包Swashbuckle.AspNetCore
然后右击你的项目,在属性
中,勾选下生成XML文档文件,Swagger会自动解析对应的XML进行匹配。
然后开始编码部分,在Startup.cs
中ConfigureServices
f方法下加入下面的代码:
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" });
var basePath = PlatformServices.Default.Application.ApplicationBasePath;
var xmlPath = Path.Combine(basePath, "MyDemo.xml");
var xmlPath1 = Path.Combine(basePath, "MyDemo.Model.xml");
c.IncludeXmlComments(xmlPath);
c.IncludeXmlComments(xmlPath1);
});
这里我将Model层的Xml也加载了,这样在api文档上也能显示对应字段的描述。
在Configure
方法中加入下面代码:
app.UseSwagger();
app.UseSwaggerUI(c=>{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "我的API V1");
});
配置到这里,可以直接运行看下效果了,结果运行后发现报错如下:
那是因为主项目没有引用Model
这个类库,导致在主项目的debug
中没有生产对应的xml
,引用下,重新生产再次运行,输入/swagger
就能看到对应的效果了。
记得项目接入的时候才1.0.0
的版本,如今2.3.0
的版本样式也变了很多了。
这样我可以启动默认页设为/swagger
,右击docker-compose
修改对应的url
:
代码编写
逻辑代码不多说,基本没什么区别,大多数常用的属性和方法.net core基本都支持,放心大胆的写吧。
这里推荐使用异步编程await
,async
,但要注意的是,一定要异步到底,避免阻塞。
可以简单看个例子:
//Dal层:
public static async Task<ResponseResult> Delete(long id)
{
var result = new ResponseResult();
try
{
using (var conn = DatabaseManager.GetConnection(DatabaseManager.DBName))
{
await conn.OpenAsync();
string sql = $@"DELETE FROM USER WHERE Id=@Id";
await conn.ExecuteAsync(sql, new { Id = id, UpdateTime = DateTime.Now });
}
}
catch (Exception ex)
{
//记录日志
return new ResponseResult { Result = false, Code = ResponseCode.UnknownException, ErrorMessage = ex.Message };
}
return result;
}
//BLL层
public static async Task<ResponseResult> Delete(long id)
{
if (id <= 0)
return new ResponseResult { Result = false, ErrorMessage = "未传入主键或主键非法", Code = ResponseCode.NeedsKeyParameter };
return await UserDataAccess.Delete(id);
}
//Controller
[HttpDelete("{id}")]
public async Task<IActionResult> Delete(long id)
{
return AssertNotFound(await UserService.Delete(id));
}
由于是演示,这里用的静态类和静态方法,也省去了Interface,实际项目中可以根据需要选择最合适的。
总结
.net core开发web api还是比较方便的,大家可以试试。
其他资源:
https://blog.csdn.net/boonya/article/details/80321229
https://blog.csdn.net/xiaouncle/article/details/83995809
https://blog.csdn.net/sinat_16998945/article/details/84307028
net core体系-API-Restful+Swagger搭建API的更多相关文章
- Asp.Net Core Web Api 使用 Swagger 生成 api 说明文档
最近使用 Asp.Net Core Web Api 开发项目服务端.Swagger 是最受欢迎的 REST APIs 文档生成工具之一,进入我的视野.以下为学习应用情况的整理. 一.Swagger 介 ...
- AspNet Core Api Restful +Swagger 发布IIS 实现微服务之旅 (二)
上一步我们创建好CoreApi 接下来在框架中加入 Swagger 并发布 到 IIS (1)首先点击依赖项>管理Nuget包 (2)输入 Swashbuckle.aspnetCore 比 ...
- AspNet Core Api Restful +Swagger 发布IIS
上一步我们创建好CoreApi 接下来在框架中加入 Swagger 并发布 到 IIS (1)首先点击依赖项>管理Nuget包 (2)输入 Swashbuckle.aspnetCore 比 ...
- AspNet Core Api Restful +Swagger 实现微服务之旅 (三)
(1) 访问Rest ful接口时 Token验证 返回数据格式封装 (一)访问时Token验证 返回数据格式封装 1.1访问Api接口 方法 实现 1.1.1 创建访问Rest ...
- AspNet Core Api Restful +Swagger 实现微服务之旅(四)
这几天没更新,项目框架也是在发展阶段,这几天学习配置了一遍Apollo和RabbitMQ 等到放到框架上之后我整理一下到时候把心得写出来相互学习. 接着上一篇的内容 (2) 程序错误时 返回数据格 ...
- ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了
引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必是件很痛苦的事情吧,但文档又必须写,而且文档的格式如果没有具体要求的话,最终完成的文档则完全取决于开发者 ...
- ASP.NET Core WebApi使用Swagger生成api
引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必是件很痛苦的事情吧,但文档又必须写,而且文档的格式如果没有具体要求的话,最终完成的文档则完全取决于开发者 ...
- 【转】ASP.NET Core WebApi使用Swagger生成api说明文档看这篇就够了
原文链接:https://www.cnblogs.com/yilezhu/p/9241261.html 引言 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必 ...
- .NET Core WebApi帮助文档使用Swagger生成Api说明文档
Swagger也称为Open API,Swagger从API文档中手动完成工作,并提供一系列用于生成,可视化和维护API文档的解决方案.简单的说就是一款让你更好的书写API文档的框架. 我们为什么选择 ...
随机推荐
- 【C/C++】Dijkstra算法的简洁实现
Dijkstra的实现有很多种,下面给出一种较为简洁和高效的实现,可以作为模板快速使用. 1. 使用邻接表存储图: 2. 使用标准STL的vector存储每个点的所有邻接边: 3. 使用pair记录当 ...
- mpvue——引入echarts打包vendor过大
前言 有一个项目需要引入图表,当时有两种选择一种是mpvue-echarts,一种是F2,而我经过踩坑之后依然决然的选择了mpvue-echarts,简单快捷容易上手,主要之前用过比较熟悉. 问题 | ...
- AVL树探秘
本文首发于我的公众号 Linux云计算网络(id: cloud_dev) ,专注于干货分享,号内有 10T 书籍和视频资源,后台回复 「1024」 即可领取,欢迎大家关注,二维码文末可以扫. 一.AV ...
- BZOJ 3653: 谈笑风生(离线, 长链剖分, 后缀和)
题意 给你一颗有 \(n\) 个点并且以 \(1\) 为根的树.共有 \(q\) 次询问,每次询问两个参数 \(p, k\) .询问有多少对点 \((p, a, b)\) 满足 \(p,a,b\) 为 ...
- Java【第十篇】集合
Java 集合概述 Java 集合就像一种容器,可以把多个对象的引用放入容器中.Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组Java 集合可分为 Set.List ...
- java String转int int转化为String
String转int String str = "123"; int a = Integer.parseInt(str); System.out.println(a); Integ ...
- django系列7:修改404页面展示,优化模板,降低urlconf和模板之间的耦合,命名app将模板和app绑定
为了增加程序的友好和健壮性,修改view代码,处理以下如果出现404,页面的UI展示. 修改view代码 from django.http import Http404 from django.sho ...
- TensorFlow迁移学习的识别花试验
最近学习了TensorFlow,发现一个模型叫vgg16,然后搭建环境跑了一下,觉得十分神奇,而且准确率十分的高.又上了一节选修课,关于人工智能,老师让做一个关于人工智能的试验,于是觉得vgg16很不 ...
- busybox(四)完善
目录 busybox(四)完善 proc挂载 手动挂载 proc解析 使用脚本自动挂载 使用mount-a挂载 udev/mdev 挂载 使用jffs2 文件系统格式 安装zlib 安装jffs2 生 ...
- 图解Tomcat类加载机制(阿里面试题)
Tomcat的类加载机制是违反了双亲委托原则的,对于一些未加载的非基础类(Object,String等),各个web应用自己的类加载器(WebAppClassLoader)会优先加载,加载不到时再交给 ...