0


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

简介

使用使用 ASP.NET Core 8 创建一个增删查改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<OurHero> 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<OurHero> _ourHeroesList;
        public OurHeroService()
        {
            _ourHeroesList = new List<OurHero>()
            {
                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<OurHero> 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<IOurHeroService, OurHeroService>();
//*********************** 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数据的增删查改示例程序,如果感兴趣,可以把它集成到你的前端项目中。感谢阅读

标签: .net asp.net 后端

本文转载自: https://blog.csdn.net/typtyptian/article/details/137747468
版权归原作者 十二年过去了 所有, 如有侵权,请联系我们删除。

“使用 ASP.NET Core 8 实现简单的Web API CRUD操作”的评论:

还没有评论