.net core项目实战之基于Restful API+Swagger项目搭建

news/2024/6/18 21:17:27
在上一篇 .net core项目实战之开发环境搭建主要介绍了项目开发环境的搭建,本篇主要简单介绍下.net core下搭建WebApi及集成Swagger,同时介绍一些自己编程时的一些习惯。

项目结构

项目结构其实不用多说,基本上大同小异。

  • Controller:对外暴露的契约
  • Business/IBussiness:业务逻辑层实现及接口
  • DataAccess:数据访问层
  • Model:实体类库
  • Common:公共方法类库

图1

Swagger集成

首先通过NuGet加载依赖包Swashbuckle.AspNetCore

图2

然后右击你的项目,在属性中,勾选下生成XML文档文件,Swagger会自动解析对应的XML进行匹配。

图3

然后开始编码部分,在Startup.csConfigureServicesf方法下加入下面的代码:

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");
    });

配置到这里,可以直接运行看下效果了,结果运行后发现报错如下:

图4

那是因为主项目没有引用Model这个类库,导致在主项目的debug中没有生产对应的xml,引用下,重新生产再次运行,输入/swagger就能看到对应的效果了。

记得项目接入的时候才1.0.0的版本,如今2.3.0的版本样式也变了很多了。

图5

这样我可以启动默认页设为/swagger,右击docker-compose修改对应的url:

图6

代码编写

逻辑代码不多说,基本没什么区别,大多数常用的属性和方法.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还是比较方便的,大家可以试试。


http://www.niftyadmin.cn/n/3021144.html

相关文章

南阳师范学院计算机科学与技术在哪个校区,2021年南阳师范学院有几个校区,大一新生在哪个校区...

很多南阳师范学院新生报到之前都有很多疑问&#xff0c;其中一个疑问就是南阳师范学院有几个校区&#xff0c;大一新生在哪个校区。本文主要为大家介绍关于2020年南阳师范学院的介绍&#xff0c;南阳师范学院招生各个专业目录、南阳师范学院新生在哪个校区的知识。一、南阳师范…

台式计算机关机,台式惠普电脑总是自动关机的三种解决方法

运行台式惠普win7系统电脑时总会碰到各种故障问题&#xff0c;这不一位用户说电脑总是自动关机&#xff0c;怎么回事&#xff1f;造成电脑自动关机的原因有很多&#xff0c;我们要根据具体故障原因来解决&#xff0c;下面小编告诉大家台式惠普电脑总是自动关机的三种原因及解决…

部队里可以学计算机软件吗,报考火爆!部队文职人员跟计算机程序员哪个好?...

副标题【导读】华图军队文职同步华图教育发布&#xff1a;报考火爆&#xff01;部队文职人员跟计算机程序员哪个好&#xff1f;&#xff0c;详细信息请阅读下文&#xff01;欢迎订阅军队文职公众号:huatujunduiwenzhi&#xff0c;更多军队考试详情军队文职用书作为新晋热门公职…

【JAVA练习】- 给定精度求圆周率π

给定一个精度求圆周率π的近似值 给定公式&#xff1a;π/41-1/31/5-1/71/9-... 1 public static void main(String[] args) {2 System.out.println("请输入π的精度&#xff08;小数点后有效位数&#xff09;");3 Scanner input new Scanner(System.in);4 …

2020年河北专接本计算机院校排名,2021年河北专接本最全院校排名(最新版)

原标题&#xff1a;2021年河北专接本最全院校排名(最新版)河北专接本考试已经过去20天眼看着成绩将要公布大三的同学有没有根据自己的估分选好志愿&#xff1f;大一大二备考的孩子们想好要考什么学校了吗&#xff1f;很多接本人一面对择校就秒变天秤座太纠结啦&#xff0c;到底…

学计算机进富士康,大学生去富士康会分配到流水线上工作吗?

曾几何时&#xff0c;本科生、专科生都能顶着一个“天之骄子”的光环&#xff0c;但随着中国高校无限制地扩招&#xff0c;加之&#xff0c;整体的职业教育常常同企业需求脱节&#xff0c;导致天之骄子们就业非常困难&#xff0c;有人调侃企业去高校招聘&#xff0c;任何的面试…

SpringMVC请求乱码

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/inforstack/article/details/79637386 web.xml添加配置 <filter> <filter-name>SetCharacterEncoding</filter-name> <filter-class>org.springfr…

EIGRP(增强内部网关路由选择协议)

EIGRP (Enhanced Interior Gateway Routing Protocol)增强的内部 网关路由 选择协议 EIGRP 是增强版的IGRP协议 . 特点&#xff1a; 1.基于距离适量和链路状态的优点. &#xff12;.管理距离为90. 3.不需要定期发送更新信息,只有链路状态发生变化时才使用组播发送更…