使用 ASP.NET Core 8 实现简单的Web API CRUD操作
简介
使用使用 ASP.NET Core 8 创建一个增删查改API,这个示例中,将展示一个简单但是完整的真实案例
目录
简介
前置要求
什么是API?
什么是RESTful API?
什么是CRUD?
.NET 8 Web API
总结
前置要求
Visual Studio 2022 或者 Visual Studio Code(安装了.NET 8 SDK)
什么是API?
- API是Application Programming Interface(应用程序的缩写)
- API定义了与其他软件系统通信时必须遵循的规则
- 开发人员公开api,以便其他应用程序可以以编程方式与他们的应用程序通信
什么是RESTful API?
说来话长,总之就是某种特定风格的API
什么是CRUD?
CRUD是Create, Read, Update, and Delete的缩写,就是所谓的增删查改
.NET 8 Web API
1.打开Visual Studio 2022创建一个新项目
2.选择ASP.NET Core Web API模板,然后点击下一步
3.输入项目名称及位置并勾选“将解决方案和项目放在同一目录中”,然后点击下一步,如图所示
4.在接下来出现的界面中选择依照图示选择相关配置,并点击创建
至此,Visual Studio就帮我们创建了一个Web API的脚手架
5.删除项目中Controllers文件夹下面的WeatherForecastController.cs文件,这是项目模板为我们预定义的一个API文件,现在我们不需要它.
6.删除了WeatherForecastController.cs文件后,目前Controllers文件夹是空的,我们右键Controllers文件夹,选择“添加” - “控制器” 给它添加一个新的控制器,如图所示。
7.选择 “通用” - “API” - “API控制器 - 空”,点击“添加” 如图所示
8.在接下来的界面中,再次确保我们选中的是“API 控制器 - 空”,并输入名称如图所示,然后添加
此时Controllers文件夹下就会出现我们刚刚创建的文件如图所示
9.接下来为我们的项目添加两个文件夹,分别是
- Model
- Services
办法如图所示
然后
10.右键点击Model文件夹,然后选择“添加” - “新建项”,如图所示
在弹出来的窗口中输入文件的名字OurHero.cs如图所示,然后点击添加
11.在OurHero.cs文件中,填入如下内容:
//OurHero.cs namespace SimpleWebApi.Model { public class OurHero { public int Id { get; set; } public required string FirstName { get; set; } public string LastName { get; set; }=string.Empty; public bool isActive { get; set; } = true; } }
12.再在Model文件夹中添加一个AddUpdateOurHero.cs文件,方法同第10步操作一样,并添加如下内容,AddUpdateOurHero模型用来添加或更新英雄列表
// AddUpdateOurHero.cs namespace SimpleWebApi.Model { public class AddUpdateOurHero { public required string FirstName { get; set; } public string LastName { get; set; } = string.Empty; public bool isActive { get; set; } = true; } }
13.创建Service文件,右键Services文件夹,创建一个名为IOurHeroService.cs的文件,方法同第10步,并在IOurHeroService.cs文件中添加如下内容,请注意,我们现在要创建的是interface而不是class,Visual Studio应该自动生成public interface... 而不是 public class... ,如果没有,请自行修正
//IOurHeroService.cs using SimpleWebApi.Model; namespace SimpleWebApi.Services { public interface IOurHeroService { List GetAllHeros(bool? isActive); OurHero? GetHerosByID(int id); OurHero AddOurHero(AddUpdateOurHero obj); OurHero? UpdateOurHero(int id, AddUpdateOurHero obj); bool DeleteHerosByID(int id); } }
14.再在Services文件夹下创建一个名为OurHeroService.cs的文件,方法同第10步,并添加以下内容,该class实现了IOurHeroService接口
// OurHeroService.cs using SimpleWebApi.Model; namespace SimpleWebApi.Services { public class OurHeroService : IOurHeroService { private readonly List _ourHeroesList; public OurHeroService() { _ourHeroesList = new List() { new OurHero() { Id=1, FirstName="孙", LastName="悟空", isActive=true, } }; } public OurHero AddOurHero(AddUpdateOurHero obj) { var addHero = new OurHero() { Id = _ourHeroesList.Max(hero => hero.Id) + 1, FirstName = obj.FirstName, LastName = obj.LastName, isActive = obj.isActive, }; _ourHeroesList.Add(addHero); return addHero; } public bool DeleteHerosByID(int id) { var ourHeroIndex = _ourHeroesList.FindIndex(index => index.Id == id); if (ourHeroIndex >= 0) { _ourHeroesList.RemoveAt(ourHeroIndex); } return ourHeroIndex >= 0; } public List GetAllHeros(bool? isActive) { return isActive == null ? _ourHeroesList : _ourHeroesList.Where(hero => hero.isActive == isActive).ToList(); } public OurHero? GetHerosByID(int id) { return _ourHeroesList.FirstOrDefault(hero => hero.Id == id); } public OurHero? UpdateOurHero(int id, AddUpdateOurHero obj) { var ourHeroIndex = _ourHeroesList.FindIndex(index => index.Id == id); if (ourHeroIndex > 0) { var hero = _ourHeroesList[ourHeroIndex]; hero.FirstName = obj.FirstName; hero.LastName = obj.LastName; hero.isActive = obj.isActive; _ourHeroesList[ourHeroIndex] = hero; return hero; } else { return null; } } } }
15.修改项目文件根目录下的Program.cs文件如下列所示内容
// Program.cs using SimpleWebApi.Services; var builder = WebApplication.CreateBuilder(args); //*********************** Add services to the container.*********************** builder.Services.AddSingleton(); //*********************** Add services to the container end.*********************** builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();
16.将IOurHeroService注入到OurHeroController,打开Controllers文件夹下的OurHeroController.cs文件并将其修改为如下内容
// OurHeroController.cs using SimpleWebApi.Services; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace SimpleWebApi.Controllers { [Route("api/[controller]")] [ApiController] public class OurHeroController : ControllerBase { private readonly IOurHeroService _heroService; public OurHeroController(IOurHeroService heroService) { _heroService = heroService; } } }
17.再次修改OurHeroController.cs文件,加入Get,Post,Put,Delete这些action方法,完整的代码如下
//OurHeroController.cs using Microsoft.AspNetCore.Mvc; using SimpleWebApi.Model; using SimpleWebApi.Services; namespace SimpleWebApi.Controllers { [Route("api/[controller]")] [ApiController] public class OurHeroController : ControllerBase { private readonly IOurHeroService _heroService; public OurHeroController(IOurHeroService heroService) { _heroService = heroService; } [HttpGet] public IActionResult Get([FromQuery] bool? isActive = null) { return Ok(_heroService.GetAllHeros(isActive)); } [HttpGet] [Route("{id}")] public IActionResult Get(int id) { var hero = _heroService.GetHerosByID(id); if (hero == null) { return NotFound(); } return Ok(hero); } [HttpPost] public IActionResult Post(AddUpdateOurHero heroObject) { var hero = _heroService.AddOurHero(heroObject); if (hero == null) { return BadRequest(); } return Ok(new { message = "Super Hero Created Successfully!!!", id = hero!.Id }); } [HttpPut] [Route("{id}")] public IActionResult Put([FromRoute] int id, [FromBody] AddUpdateOurHero heroObject) { var hero = _heroService.UpdateOurHero(id, heroObject); if (hero == null) { return NotFound(); } return Ok(new { message = "Super Hero Updated Successfully!!!", id = hero!.Id }); } [HttpDelete] [Route("{id}")] public IActionResult Delete([FromRoute] int id) { if (!_heroService.DeleteHerosByID(id)) { return NotFound(); } return Ok(new { message = "Super Hero Deleted Successfully!!!", id = id }); } } }
18.运行程序,在Visual Studio中按F5运行我们的App,浏览器会自动打开Swagger页面,点击 GET API/OurHero , 然后再依次点击Try it out 和 Execute就可以看到我们的Hero列表
你也可以在页面中尝试增删查改的其他操作
总结
这就是一个完整的ASP.NET Core 8 In-memory数据的增删查改示例程序,如果感兴趣,可以把它集成到你的前端项目中。感谢阅读
还没有评论,来说两句吧...