.Net Api Sql Sugar
文章介绍:
大家好,我是行不更名,坐不改姓的宋晓刚,下面将带领大家从基础小白到高阶的C#的Api学习,跟上我的步伐进入C#的世界。
微信:15319589104
QQ: 2981345658
本文将为您深入介绍.NET Core WebAPI的基础知识,以及新引入的MinimalAPI的概念。同时,我们还将详细讲解如何使用SqlSugar这一轻量级ORM工具进行数据操作。最后,我们将引导您了解如何通过静态文件中间件轻松访问站点资源。
目录讲解:
- 介绍WebApi框架结构
- 最小化的WebApi框架结构使用
- 利用Api和Sql Sugar同步到数据库数据
- 静态文件中间件访问
Wep Api结构
Web Api概述
WebApi概述:
- 在本模块中,你将使用 ASP.NET Core 创建新的 Web API 应用程序,并了解如何从命令行运行和测试该应用程序。
- 我们浏览网页时候,Web服务器将使用Html,Css和Js与浏览器同行,例如提交登录按钮窗体,浏览器会将信息发送回Web服务器。
- Web服务器可以使用(浏览器,移动设备,其他Web服务器等)通信,API客户端通过HTTP与服务器Web 服务与各种各样的客户端通信,两者都使用 JSON 或 XML 等数据格式来交换信息。
框架说明:
- Web API是一个HTTP服务端框架,它同RESTful web服务亦是一致的,换句话说,其会对于每一个不同的方法,都会有一个与之相对的HTTP方法。其最常用的HTTP方法有GET、POST、PUT、DELETE
- GET:其是用于请求数据。其并不会修改服务器上的数据。
- POST:其是用于提交数据。其会请求在服务器上新建数据。
- PUT:其是用于更新服务器上的数据。会携带需要更新的数据作为请求体。
- DELETE:其是用于删除服务器上的数据。
- 控制器:.Net Web Api中,可以使用控制器(Controller)来处理客户端的请求并返回响应。控制器是一个类,其中包含一系列的方法,每个方法都可以处理一个特定的HTTP请求。
- Model:模型是一个类,其中包含数据的属性和方法。你可以使用自动映射将来自客户端的JSON数据转换为你的模型对象。
创建项目
普通项目
1.0创建项目,我们点击新建Web Api,需要我们配置,勾选选项如下:
- 配置 HTTPS(H)
- 使用控制器(取消选中以使用最小 API)
- 启用 OpenAPI支持(O)
如下图所示:
项目文件介绍:
Program.cs
:此文件是项目的入口点,它定义了应用程序的启动过程和运行时行为。Controllers
文件夹:此文件夹中包含项目中的控制器。控制器是用于处理客户端请求的类,每个控制器通常对应一个或多个HTTP路由。Views
文件夹:此文件夹中包含用于呈现HTML的视图。视图是用于展示数据给客户端的静态文件。wwwroot
文件夹:此文件夹是Web应用程序的根目录,其中包含所有静态文件,例如HTML、CSS、JavaScript文件等。
最小化项目
1.0创建项目,我们点击新建Web Api,我们只需要勾选一个选项启用 OpenAPI支持(O) ,剩下的配置选项都不勾选
2.0删除Program中的代码,删除后的代码如下:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.Run();
3.0下面我们进行添加数据库字符串连接,安装Nugut包SqlSugarCore
注: 我们在appsettings.json这个文件中,去添加字符串连接,数据库可以没有,我们代码会自动创建数据库的。
"ConnectionStrings": {
"conn": "Data Source=LAPTOP-QME2OEFQ;Initial Catalog=StuApi;User ID=sa;Password=000000;Encrypt=false"
}
4.0在Program中去配置数据库连接字符串
// 配置数据库连接字符串
builder.Services.AddScoped<ISqlSugarClient>(p =>
{
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
DbType = DbType.SqlServer,
ConnectionString = builder.Configuration.GetConnectionString("conn"),
IsAutoCloseConnection = true
});
return db;
});
5.0添加Model文件夹,并且创建类Apistudy代码如下:
类:数据库中的表以及字段的属性
public class Apistudy
{
[SugarColumn(IsPrimaryKey = true)]
public string Id { get; set; }
public string Title { get; set; }
public decimal OriPrice { get; set; }
public decimal Price { get; set; }
public string Desc { get; set; }
public int Num { get; set; }
public string Image { get; set; }
public string Tag { get; set; }
public int CommentCount { get; set; }
public decimal GoodCommentRate { get; set; }
public DateTime CreateTime { get; set; }
}
6.0下面我们去写Api,通过Api访问成功,从而后台自动创建好数据库的表和字段。
数据库和表
//创建控制器,自动生成数据库和表和字段
app.MapGet("/api/codefirst", (ISqlSugarClient db) =>
{
db.DbMaintenance.CreateDatabase();
var tblist = db.DbMaintenance.GetTableInfoList();
if (tblist != null && tblist.Count > 0)
{
tblist.ForEach(p =>
{
db.DbMaintenance.DropTable(p.Name);
});
}
// 生成表
// 生成表
string nspace = "MiniApi.Model";
Type[] ass = Assembly.LoadFrom(AppContext.BaseDirectory + "MiniApi.dll").GetTypes()
.Where(p => p.Namespace == nspace).ToArray();
db.CodeFirst.SetStringDefaultLength(200).InitTables(ass);
return "访问成功,成功添加数据库和表";
});
app.Run();
浏览器效果展示:
数据展示:
添加字段:
下面,我们继续往数据库中添加字段:
//创建控制器,自动生成数据库和表和字段
app.MapGet("/api/codefirst", (ISqlSugarClient db) =>
{
db.DbMaintenance.CreateDatabase();
var tblist = db.DbMaintenance.GetTableInfoList();
if (tblist != null && tblist.Count > 0)
{
tblist.ForEach(p =>
{
db.DbMaintenance.DropTable(p.Name);
});
}
// 生成表
// 生成表
string nspace = "MiniApi.Model";
Type[] ass = Assembly.LoadFrom(AppContext.BaseDirectory + "MiniApi.dll").GetTypes()
.Where(p => p.Namespace == nspace).ToArray();
db.CodeFirst.SetStringDefaultLength(200).InitTables(ass);
// Model中的类名
List<Apistudy> list = new List<Apistudy>();
for (int i = 1; i <= 50; i++)
{
string tag = string.Empty;
if (i < 5)
{
tag = "新品";
}
else if (i > 8 && i <= 20)
{
tag = "活动";
}
list.Add(new Apistudy()
{
Id = Guid.NewGuid().ToString(),
Title = "Apple iPhone 13 (A2634) 128GB 星光色 支持移动联通电信5G 双卡双待手机【快充套装】",
OriPrice = 15999 + i,
Price = 13999 + i,
Desc = "【机不可失】指定iPhone13领券立减600元加9元即可购买快充套装,限时限量现在领取!更多优惠请猛戳",
Num = 500 + i,
Image = "/img/ipad.jpeg",
Tag = tag,
CommentCount = 999 + i,
GoodCommentRate = 88 + i,
CreateTime = DateTime.Now
});
}
list.Add(new Apistudy()
{
Id = Guid.NewGuid().ToString(),
Title = "小米13 徕卡光学镜头 第二代骁龙8处理器 超窄边屏幕 120Hz高刷 67W快充 8+256GB 黑色 5G手机",
OriPrice = 4299,
Price = 4099,
Desc = "【机不可失】第二代骁龙8移动平台 屏幕分辨率 2400*1080",
Num = 899,
Image = "/img/ipad.jpeg",
Tag = "新品",
CommentCount = 9999,
GoodCommentRate = 99,
CreateTime = DateTime.Now
});
db.Insertable(list).ExecuteCommand();
return "访问成功,成功添加数据库和表,包括字段";
});
app.Run();
注:上面代码是创建数据库和表,以及字段的总代码,app.Run必须要在最后,要不控制器无效。
数据库最后访问Api后的效果如下:
中间件文件访问
1.0新建一个文件夹,名字为wwwroot直接回车,会出现下图文件夹,我们在里面放一些图片
wwwroot介绍:一般存放Html,Css,Js,img
2.0 静态资源中间件,启动项目,利用项目路径进行在浏览器中访问图片,从www后开始算路径,不包含www
我们在Program中进行去访问
app.UseStaticFiles();
效果如下:
3.0上面这样存放资源,很容易被黑客入侵了,从而拿走我们一些重要的文件,所有下面解决方案,自定义路径访问
// 自定义路径,进行去访问
var fileProvider = new PhysicalFileProvider(Path.Combine(builder.Environment.WebRootPath, "shopping")); //文件夹名字
var requestPath = "/dx";
// 静态资源中间件
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = fileProvider,
// 自定义路径
RequestPath = requestPath
});
效果如下: