梦想家装平台开发记录,Asp-Net-Core上手实践
DreamingHome Dreaming Home 梦想家,家装平台 EF Core概念 Model: 数据模型,一个普通的C#类 DbContext: 与数据库沟通的桥梁,一个数据库对应一个DbContext 注册EF Core服务 services.AddEntityFrameworkSqlite() .AddDbContextMainContext(options = option
目录15 个章节
DreamingHome
Dreaming Home 梦想家,家装平台
EF Core概念
Model: 数据模型,一个普通的C#类DbContext: 与数据库沟通的桥梁,一个数据库对应一个DbContext
注册EF Core服务
services.AddEntityFrameworkSqlite()
.AddDbContext<MainContext>(options => options.UseSqlite(Configuration["database:connection"]));
数据库上下文 DbContext
public class MainContext : DbContext
{
public MainContext() { }
public MainContext(DbContextOptions<MainContext> options) : base(options) { }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json");
var configuration = builder.Build();
optionsBuilder.UseSqlite(configuration["database:connection"]);
}
}
这里我遇到一个很奇怪的问题,单纯在Startup.cs里面注册EFCore根本不行,运行的时候老是提示我No database provider,只能在DbContext里面再重写这个OnConfiguring,重新配置一遍数据库= =...
数据库迁移
创建数据库迁移:
dotnet ef migrations add InitialCreate -v
查看状态:
dotnet ef migrations list
应用迁移来更新数据库:
dotnet ef database update -v
引入Swagger支持
安装依赖
Install-Package Swashbuckle.AspNetCore
配置中间件
using Swashbuckle.AspNetCore.Swagger;
// 在Startup.ConfigureServices中配置服务
services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo {Title = "My Api", Version = "v1"}); });
// 在Startup.Configure中配置中间件
app.UseSwagger();
app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); });
把应用的根路径设置为Swagger UI,如下:
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
c.RoutePrefix = string.Empty;
});
启动测试
启动应用,并导航到http://localhost:<port>/swagger/v1/swagger.json,生成的描述终结点的文档显示如下json格式。
可在 http://localhost:<port>/swagger 找到 Swagger UI。 通过 Swagger UI 浏览 API文档。
注意
- 每一个
Controller的方法都需要标注出具体的Http方法,不然会报错 Swagger会自动读取每个接口函数的C#文档,但是前提是要生成xml文档才可以
自定义以及扩展
修改之前配置的Swagger服务:
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1",
info: new OpenApiInfo
{
Version = "v1",
Title = "Dreaming Home 智能家装平台",
Description = "智能家装平台 Api 文档",
TermsOfService = new Uri("http://blog.deali.cn"),
Contact = new OpenApiContact
{
Name = "DealiAxy",
Email = "dealiaxy@gmail.com",
Url = new Uri("https://zhuanlan.zhihu.com/deali"),
},
License = new OpenApiLicense
{
Name = "GNU GENERAL PUBLIC LICENSE Version 2",
Url = new Uri("https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"),
}
});
});
显示接口的xml文档要先生成,然后在services.AddSwaggerGen里面设置才行。
// 为 Swagger JSON and UI设置xml文档注释路径
//获取应用程序所在目录(绝对,不受工作目录影响,建议采用此方法获取路径)
var basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location);
var xmlPath = Path.Combine(basePath, "Doc", "DreamingHome.xml");
c.IncludeXmlComments(xmlPath);
小结
通过上面的操作可以总结出,Swagger UI 显示上述注释代码的 <summary> 元素的内部文本作为api大的注释!
当然你还可以将 remarks 元素添加到 Get 操作方法文档。 它可以补充 <summary> 元素中指定的信息,并提供更可靠的 Swagger UI。 <remarks> 元素内容可包含文本、JSON 或 XML。 代码如下:
/// <summary>
/// 这是一个带参数的get请求
/// </summary>
/// <remarks>
/// 例子:
/// Get api/Values/1
/// </remarks>
/// <param name="id">主键</param>
/// <returns>测试字符串</returns>
[HttpGet("{id}")]
public ActionResult<string> Get(int id)
{
return $"你请求的 id 是 {id}";
}
描述响应类型
接口使用者最关心的就是接口的返回内容和响应类型啦。下面展示一下201和400状态码的一个简单例子:
我们需要在我们的方法上添加:
[ProducesResponseType(201)]
[ProducesResponseType(400)]
然后添加相应的状态说明:返回value字符串如果id为空
最终代码应该是这个样子:
/// <summary>
/// 这是一个带参数的get请求
/// </summary>
/// <remarks>
/// 例子:
/// Get api/Values/1
/// </remarks>
/// <param name="id">主键</param>
/// <returns>测试字符串</returns>
/// <response code="201">返回value字符串</response>
/// <response code="400">如果id为空</response>
// GET api/values/2
[HttpGet("{id}")]
[ProducesResponseType(201)]
[ProducesResponseType(400)]
public ActionResult<string> Get(int id)
{
return $"你请求的 id 是 {id}";
}
运行效果

欢迎交流
交流问题请在微信公众号后台留言,每一条信息我都会回复哈~
_EOF_
梦想家装平台开发记录,Asp-Net-Core上手实践
- 本文作者:
- 程序设计实验室
- 版权声明:
- 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
相关文章
跨平台框架AspNetCore开发实践杂谈
前言 最近边学边做,初步上手了AspNetCore的开发,对MVC这套熟悉了一下,因为之前没有拿来做过独立项目,都是和别人合作开发,所以前后端分离,我都只做WebApi,而且还是很小的项目(课设级别),生产环境用最多的应该是Python的Django框架,这次我把一个之前做的Django项目用AspNetCore重写一遍,性能提升了不少,C#的性能真不是盖的,AspNetCore这个框架的性能也很
2022-08-28 · AspNetCore · 约 1 分钟
Blazor全栈是个陷阱
Blazor全栈?别逗了,这玩意儿就是陷阱。生态弱得可怜,AI都不给力,文档还老变。真以为能脱离前端?醒醒吧,小demo可以,真业务?省省吧。
2025-09-17 · AspNetCore · 约 1 分钟
如何查看安卓模拟器的ADB端口号?
找到模拟器的进程 用tasklist查看进程pid tasklist 找到模拟器进程的PID,然后再使用netstat命令。 netstat -ano | findstr 1000 这里的 1000 就是上面查到的进程PID。 根据获取到的端口号,就可以使用 ADB 连接了。 adb connect 127.0.0.1:端口号 当然最好的方法还是去模拟器提供商的网站上查一下,这是最方便的。 例如我
2021-12-18 · Android · 约 1 分钟
一些实用工具软件记录
CrystalDisk系列 https://crystalmark.info/en/download/ CrystalDiskInfo CrystalDiskMark 磁盘空间分析 推荐 wiztree,速度很快 https://diskanalyzer.com/download
2022-11-06 · 杂七杂八 · 约 1 分钟
讨论
共 0 条加载评论中…