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

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

项目结构

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

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

图1

Swagger集成

首先经过NuGet加载依赖包Swashbuckle.AspNetCoresql

图2

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

图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文档上也能显示对应字段的描述。json

Configure 方法中加入下面代码:api

app.UseSwagger();
    app.UseSwaggerUI(c=>{
        c.SwaggerEndpoint("/swagger/v1/swagger.json", "个人API V1");
    });

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

图4

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

记得项目接入的时候才1.0.0的版本,现在2.3.0的版本样式也变了不少了。async

图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仍是比较方便的,你们能够试试。