.net core项目实战之基于Restful API+Swagger项目搭建
在上一篇.net core项目实战之开发环境搭建主要介绍了项目开发环境的搭建,本篇主要简单介绍下.net core下搭建WebApi及集成Swagger,同时介绍一些自己编程时的一些习惯。
项目结构
项目结构其实不用多说,基本上大同小异。
- Controller:对外暴露的契约
- Business/IBussiness:业务逻辑层实现及接口
- DataAccess:数据访问层
- Model:实体类库
- Common:公共方法类库
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还是比较方便的,大家可以试试。
相关推荐
85291545 2020-05-01
SAMXIE 2020-11-04
XuDanT 2020-09-16
permanent00 2020-09-15
哈嘿Blog 2020-09-08
Qizonghui 2020-08-02
莫问前程 2020-08-02
SAMXIE 2020-07-26
XuDanT 2020-07-24
莫问前程 2020-07-18
Qizonghui 2020-07-18
coolhty 2020-07-05
Qizonghui 2020-06-28
Qizonghui 2020-06-25
莫问前程 2020-06-22
SAMXIE 2020-06-14
莫问前程 2020-06-14
XuDanT 2020-06-07
qingjiuquan 2020-06-07