
ASP.NET Web API快速入門介紹
名稱如下:
選擇.Net6,如下:
創(chuàng)建好之后,運行項目,如下:
項目成功運行,如下:
之后,我們就可以開始使用RESTful了。
我們現(xiàn)在Program
中注入Controller
,以便后續(xù)使用,如下:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();//添加
var app = builder.Build();
app.MapGet("/", () => "Hello,World");
app.MapControllers();//添加
app.Run();
使用控制器有3中方式,如下:
Controller
為后綴[Controller]
特性Controller
類我們目前使用的是第三種方式,內(nèi)容如下:
[Route("api/infos")]
public class RESTfulDemo : ControllerBase {
}
我們通過命令安裝該庫,并將其注入,如下:
Install-Package SqlsugarCore
builder.Services.AddSqlSugarSingleton(SqlSugar.DbType.MySql, builder.Configuration["mysql"]);
至此,SqlSugar就配置完成了。
數(shù)據(jù)庫名:restful_demo
表名:tb_student_info
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS tb_student_info
;
CREATE TABLE tb_student_info
(
Guid
varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '學生ID',
Name
varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '學生姓名',
Gender
varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '學生性別',
Email
varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '郵箱',
Address
varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '地址',
PRIMARY KEY (Guid
) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
INSERT INTO tb_student_info
VALUES ('09f3ea03-cf5b-7e1b-2fef-58337232ba9f\r\n', 'Jack', '男', NULL, NULL);
INSERT INTO tb_student_info
VALUES ('33720f4f-4864-8464-9151-c3c753377492\r\n', 'Mary', '女', NULL, NULL);
INSERT INTO tb_student_info
VALUES ('8d3ad90c-bf53-5d1d-c8a7-5bf9d8b3e9d5\r\n', 'Lucy', '女', NULL, NULL);
INSERT INTO tb_student_info
VALUES ('d9b64a12-b375-7ec8-85b5-0ee9cd5d9dcd\r\n', 'Tom', '男', '3534@qq.com', '祖安');
INSERT INTO tb_student_info
VALUES ('e22d7b88-1b1d-0566-1a3f-ee6d76e4bcf1\r\n', 'Jrrey', '男', '123@qq.com', '亞德里大陸');
SET FOREIGN_KEY_CHECKS = 1;
至此,數(shù)據(jù)庫就創(chuàng)建完成了。
無論做什么項目,必然會有CURD的操作(Create、Update、Read、Delete),而我們接下來就用 RESTful API 來實現(xiàn)這些功能。
我們可以通過 Get
請求來讀取和查詢數(shù)據(jù),在.Net中我們可以使用HttpGet
特性,代碼如下:
[HttpGet]
public IActionResult GetInfos() {
var datas = mStudentService.GetStudentInfos();
if (datas == null || datas.Count() == 0) {
return BadRequest(datas);
}
return Ok(datas);
}
之后,我們就可以通過 https://IP:端口/api/infos
獲取所有的數(shù)據(jù),如下:
需要注意的是我們這里獲取所有信息用的是 infos
而非 getInfos
,是因為我們遵守了RESTful API
的規(guī)范,URL必須是名詞而非動詞。
我們可以通過 Post
來創(chuàng)建新的數(shù)據(jù),.Net中可以使用 HttpPost
特性,代碼如下:
[HttpPost]
public IActionResult CreateInfo([FromBody] StudentInfoDto studentInfoDto) {
StudentInfo info = new StudentInfo();
var guid = Guid.NewGuid().ToString();
info.Guid = guid;
info.Name = studentInfoDto.Name;
info.Gender = studentInfoDto.Gender;
info.Email = studentInfoDto.Email;
info.Address = studentInfoDto.Address;
mStudentService.AddStudentInfo(info);
return Ok(studentInfoDto);
}
之后,我們就可以創(chuàng)建一個新的數(shù)據(jù)了,如下:
此時,數(shù)據(jù)就已經(jīng)新建成功了,我們查詢所有數(shù)據(jù),如下:
我們可以通過 Delete 來創(chuàng)建新的數(shù)據(jù),.Net中可以使用 HttpDelete特性,代碼如下:
[HttpDelete("{id}")]
public IActionResult DeleteInfo([FromRoute] Guid id) {
mStudentService.DeleteStudentInfo(id);
return Ok("刪除成功!");
}
現(xiàn)在我們將數(shù)據(jù)刪除,如下:
我們再次查看所有數(shù)據(jù),如下:
之所以將 更新操作放在最后,是因為這個操作會比前幾個操作繁瑣一些,這里的數(shù)據(jù)更新會分為兩類,如下:
我們可以通過 Put 來進行更新全部的數(shù)據(jù),.Net中可以使用 HttpPut 特性,如果在使用 Put 時,省略了一些字段,那么這些字段的是數(shù)據(jù)將會被刪除,代碼如下:
[HttpPut("{id}")]
public IActionResult UpdateInfo(
[FromRoute] Guid id,
[FromBody] StudentInfoDto studentInfoDto
) {
var infoToRoute = mStudentService.GetStudentInfoById(id);
if (infoToRoute == null) {
return BadRequest("當前ID不存在!");
}
return Ok(studentInfoDto);
}
現(xiàn)在我們只想將名稱改為大寫,因為我們沒有設置值,后兩項的數(shù)據(jù)已經(jīng)為空了,如下:
所以說,如果需要使用 Put 來更新數(shù)據(jù),請加上所有使用的字段。
想要使用部分更新的操作,我們還需要安裝兩個庫,如下:
Install-Package Microsoft.AspNetCore.JsonPatch
Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson
之后,我們需要先更改注入,如下:
builder.Services.AddControllers().AddNewtonsoftJson();
我們可以通過 Patch 來進行更新全部的數(shù)據(jù),.Net中可以使用 HttpPatch特性,代碼如下:
[HttpPatch("{id}")]
public IActionResult PartiallyUpdateInfo(
[FromRoute] Guid id,
[FromBody] JsonPatchDocument<StudentInfoDto> patchDocument
) {
var infoToRoute = mStudentService.GetStudentInfoById(id);
if (infoToRoute == null) {
return BadRequest("當前ID不存在!");
}
StudentInfoDto infoDto = new StudentInfoDto() {
Email = infoToRoute.Email,
Address = infoToRoute.Address,
Gender = infoToRoute.Gender,
Name = infoToRoute.Name
};
//將傳入的數(shù)據(jù)應用到infoDto上
patchDocument.ApplyTo(infoDto,ModelState);
if (!TryValidateModel(infoDto)) {
return ValidationProblem(ModelState);
}
return Ok(infoDto);
}
而現(xiàn)在,我們將名稱更改為大寫,數(shù)據(jù)就實現(xiàn)了部分更新,如下:
需要注意的是,當我們執(zhí)行部分更新是,需要用到如下的格式:
[
{
"op":"replace",
"path":"/name",
"value":"UNITYSIR"
}
]
目前這個格式在這里不做過多的說明,如果需要了解更多,請到官網(wǎng)查看?(https://jsonpatch.com/)到這里,這個基本的CRUD的操作就已經(jīng)結(jié)束了。
文章轉(zhuǎn)自微信公眾號@UnitySir