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

·  阅读 224
.net core项目实战之基于Restful API+Swagger项目搭建
原文链接: mp.weixin.qq.com

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

项目结构

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

  • Controller:对外暴露的契约

  • Business/IBussiness:业务逻辑层实现及接口

  • DataAccess:数据访问层

  • Model:实体类库

  • Common:公共方法类库

Swagger集成

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

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

然后开始编码部分,在Startup.csConfigureServices 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还是比较方便的,大家可以试试。

长按二维码 关注我们

分类:
后端
标签: