Skip to content
/ DreamingHome Public
  • Notifications
  • Fork 1
  • Star 0

Dreaming Home 梦想家,家装平台。Asp课程的课设,也是我第一次使用Asp.Net Core

License

0 stars 1 fork Branches Tags Activity
Star
Notifications

Deali-Axy/DreamingHome

Branches Tags

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits

.vscode

.vscode

 
 

Controllers

Controllers

 
 

Doc

Doc

 
 

Migrations

Migrations

 
 

Models

Models

 
 

Utils

Utils

 
 

.gitignore

.gitignore

 
 

DreamingHome.csproj

DreamingHome.csproj

 
 

DreamingHome.db

DreamingHome.db

 
 

DreamingHome.sln

DreamingHome.sln

 
 

LICENSE

LICENSE

 
 

MainContext.cs

MainContext.cs

 
 

Program.cs

Program.cs

 
 

README.md

README.md

 
 

Startup.cs

Startup.cs

 
 

appsettings.Development.json

appsettings.Development.json

 
 

appsettings.json

appsettings.json

 
 

Repository files navigation

DreamingHome

Dreaming Home 梦想家,家装设计分享 & 寻找设计师一站式平台。

项目依赖

  • .Net Core SDK 2.2
  • Asp.Net Core 2.2
  • Asp.Net Core Razor 2.2
  • EntityFramework 2.2.4
  • Swagger 5.0 rc2

数据库ER图

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

描述响应类型

摘录自: https://www.cnblogs.com/yanbigfeg/p/9232844.html

接口使用者最关心的就是接口的返回内容和响应类型啦。下面展示一下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}";
}

Releases

No releases published

Packages

No packages published

Languages

  • C# 100.0%

Footer

© 2024 GitHub, Inc.

装修网客厅卧室装修新中式客厅简装日式简约装修公装装潢公司装修装饰嘉兴简装70沅江市装修90平米的房子简装大概多少钱别墅简装一平米大概多少钱装饰装潢常州618简装酒集成墙板家装加盟红木装修效果图简装价格明细三亚装修房子北京公装施工公司鸿扬家装装饰高级别墅装饰公司家装石定制装修公司长投绿城兰园装修达州装修公司排行130平装修房子多少钱家庭旧房装修50平房子装修预算大概要多少室内简装图片辽阳装饰装修装修民宿中式小班装饰阳台装修品牌香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声汪小菲曝离婚始末卫健委通报少年有偿捐血浆16次猝死单亲妈妈陷入热恋 14岁儿子报警雅江山火三名扑火人员牺牲系谣言手机成瘾是影响睡眠质量重要因素男子被猫抓伤后确诊“猫抓病”中国拥有亿元资产的家庭达13.3万户高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了男孩8年未见母亲被告知被遗忘张家界的山上“长”满了韩国人?倪萍分享减重40斤方法许家印被限制高消费网友洛杉矶偶遇贾玲何赛飞追着代拍打小米汽车超级工厂正式揭幕男子被流浪猫绊倒 投喂者赔24万沉迷短剧的人就像掉进了杀猪盘特朗普无法缴纳4.54亿美元罚金周杰伦一审败诉网易杨倩无缘巴黎奥运专访95后高颜值猪保姆德国打算提及普京时仅用姓名西双版纳热带植物园回应蜉蝣大爆发七年后宇文玥被薅头发捞上岸房客欠租失踪 房东直发愁“重生之我在北大当嫡校长”校方回应护栏损坏小学生课间坠楼当地回应沈阳致3死车祸车主疑毒驾事业单位女子向同事水杯投不明物质路边卖淀粉肠阿姨主动出示声明书黑马情侣提车了奥巴马现身唐宁街 黑色着装引猜测老人退休金被冒领16年 金额超20万张立群任西安交通大学校长王树国卸任西安交大校长 师生送别西藏招商引资投资者子女可当地高考胖东来员工每周单休无小长假兔狲“狲大娘”因病死亡外国人感慨凌晨的中国很安全恒大被罚41.75亿到底怎么缴考生莫言也上北大硕士复试名单了专家建议不必谈骨泥色变“开封王婆”爆火:促成四五十对测试车高速逃费 小米:已补缴天水麻辣烫把捣辣椒大爷累坏了

装修网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化