使用 ASP.NET Core 8 实现简单的Web API CRUD操作

05-13 阅读 0评论

简介

使用使用 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创建一个新项目

    使用 ASP.NET Core 8 实现简单的Web API CRUD操作

    2.选择ASP.NET Core Web API模板,然后点击下一步

    使用 ASP.NET Core 8 实现简单的Web API CRUD操作

    3.输入项目名称及位置并勾选“将解决方案和项目放在同一目录中”,然后点击下一步,如图所示

    使用 ASP.NET Core 8 实现简单的Web API CRUD操作

    4.在接下来出现的界面中选择依照图示选择相关配置,并点击创建使用 ASP.NET Core 8 实现简单的Web API CRUD操作

    至此,Visual Studio就帮我们创建了一个Web API的脚手架使用 ASP.NET Core 8 实现简单的Web API CRUD操作

    5.删除项目中Controllers文件夹下面的WeatherForecastController.cs文件,这是项目模板为我们预定义的一个API文件,现在我们不需要它.

    使用 ASP.NET Core 8 实现简单的Web API CRUD操作

    6.删除了WeatherForecastController.cs文件后,目前Controllers文件夹是空的,我们右键Controllers文件夹,选择“添加”  -  “控制器” 给它添加一个新的控制器,如图所示。使用 ASP.NET Core 8 实现简单的Web API CRUD操作

    7.选择 “通用” - “API” - “API控制器 - 空”,点击“添加” 如图所示使用 ASP.NET Core 8 实现简单的Web API CRUD操作

    8.在接下来的界面中,再次确保我们选中的是“API 控制器 - 空”,并输入名称如图所示,然后添加使用 ASP.NET Core 8 实现简单的Web API CRUD操作

    此时Controllers文件夹下就会出现我们刚刚创建的文件如图所示使用 ASP.NET Core 8 实现简单的Web API CRUD操作

    9.接下来为我们的项目添加两个文件夹,分别是

    • Model
    • Services

      办法如图所示

      使用 ASP.NET Core 8 实现简单的Web API CRUD操作

      然后

      使用 ASP.NET Core 8 实现简单的Web API CRUD操作

      现在我们的文件结构应该是这样子使用 ASP.NET Core 8 实现简单的Web API CRUD操作

      10.右键点击Model文件夹,然后选择“添加” - “新建项”,如图所示

      使用 ASP.NET Core 8 实现简单的Web API CRUD操作

      在弹出来的窗口中输入文件的名字OurHero.cs如图所示,然后点击添加使用 ASP.NET Core 8 实现简单的Web API CRUD操作

      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 实现简单的Web API CRUD操作

      你也可以在页面中尝试增删查改的其他操作

      总结

      这就是一个完整的ASP.NET Core 8 In-memory数据的增删查改示例程序,如果感兴趣,可以把它集成到你的前端项目中。感谢阅读


免责声明
本网站所收集的部分公开资料来源于AI生成和互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,人围观)

还没有评论,来说两句吧...

目录[+]