本次介绍分为3篇文章:
1:.Net 8 Web API CRUD 操作
https://blog.csdn.net/hefeng_aspnet/article/details/143228383
2:在 .Net 8 API 中实现 Entity Framework 的 Code First 方法
https://blog.csdn.net/hefeng_aspnet/article/details/143229912
3:.NET 8 Web API 中的身份验证和授权
https://blog.csdn.net/hefeng_aspnet/article/details/143231987
参考文章:
1:Dot Net 8 Web API CRUD 操作
https://medium.com/@codewithankitsahu/net-8-web-api-crud-operations-125bb3083113
2:在 .Net 8 API 中实现 Entity Framework 的 Code First 方法
https://medium.com/@codewithankitsahu/implement-entity-framework-a-code-first-approach-in-net-8-api-80b06d219373
3:.NET 8 Web API 中的身份验证和授权
https://medium.com/@codewithankitsahu/authentication-and-authorization-in-net-8-web-api-94dda49516ee
介绍
在 .NET 8 中使用内存集合创建 CRUD(创建、读取、更新、删除)API 是 Web 开发中的常见场景。在本文中,我们将通过实际用例介绍如何构建完整的 .NET 8 Web API。
先决条件
Visual Studio 或 Visual Studio Code(安装了 .NET 8 SDK)。
什么是 API?
· API 代表应用程序编程接口。
· 它定义了与其他软件系统通信时必须遵循的规则。
· 开发人员公开 API,以便其他应用程序可以通过编程与他们的应用程序进行通信。
什么是 RESTful API?
· RESTful API 是两个计算机系统用来通过互联网安全地交换信息的接口。
· 大多数业务应用程序必须与其他内部和第三方应用程序通信才能执行各种任务。
CRUD 操作?
CRUD 代表“创建、读取、更新和删除”
.Net 8 WEB API
步骤1.打开Visual Studio并点击“创建新项目”。
第2步:选择“ASP .NET Core Web API”模板,点击“下一步”按钮。
步骤3.输入“项目名称”并选择“位置”,然后单击“下一步”按钮。
步骤4
- 选择 Framework 6.0 或更高版本。我选择的是 .Net 8.0(长期支持)
- 应该检查“HTTPS 配置”——它将在 HTTPS 协议中运行我们的应用程序。
- 应该选中“启用开放 API 支持”——它将为您配置 Swagger。
- 应选中“使用控制器”——这将有助于创建基于控制器的 API。
- 单击“下一步”继续。
它将生成一个带有预定义 WeatherForecastController API 的 Web API 脚手架。
步骤5.让我们删除现有的WeatherForecast Controller 并向该项目添加一个新的OurHeroController。
- 右键单击控制器文件夹(转到打开解决方案资源管理器并选择控制器文件夹)。
选择API -> “API控制器——空”,然后点击“添加”按钮。
输入控制器名称并单击添加按钮为其生成模板。
步骤6.让我们将下面的文件夹添加到我们的解决方案中。
- 模型
- 服务
右键单击解决方案 -> 添加 -> 新选项
像这样
第七步:在模型文件夹中添加OurHero模型。
选择一个模型文件夹并按 Ctrl +Shift +A 生成一个 C# 类。
或者
右键单击模型文件夹->添加->新项->输入类(模型名称如OurHero.cs)名称并按添加按钮。
// OurHero.cs
namespace DotNet8WebAPI.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;
}
}
AddUpdateOurHero.cs 模型用于添加或更新我们的列表。
//AddUpdateOurHero.cs
namespace DotNet8WebAPI.Model
{
public class AddUpdateOurHero
{
public required string FirstName { get; set; }
public string LastName { get; set; } = string.Empty;
public bool isActive { get; set; } = true;
}
}
步骤8.创建服务文件。
- IOurHeroService:接口
- 在这个文件中,我们将定义我们的Hero业务逻辑。
- OurHeroService:类,
- 我们将要实现 IOurHeroService 方法。
// IOurHeroService.cs
using DotNet8WebAPI.Model;
namespace DotNet8WebAPI.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);
}
}
// OurHeroService.cs
using DotNet8WebAPI.Model;
namespace DotNet8WebAPI.Services
{
public class OurHeroService : IOurHeroService
{
private readonly List<OurHero> _ourHeroesList;
public OurHeroService()
{
_ourHeroesList = new List<OurHero>()
{
new OurHero(){
Id = 1,
FirstName = "Test",
LastName = "",
isActive = true,
}
};
}
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 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 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;
}
}
public bool DeleteHerosByID(int id)
{
var ourHeroIndex = _ourHeroesList.FindIndex(index => index.Id == id);
if (ourHeroIndex >= 0)
{
_ourHeroesList.RemoveAt(ourHeroIndex);
}
return ourHeroIndex >= 0;
}
}
}
在服务文件中,我们使用内存集合来存储所有 _ourHeroesList 数据。
private readonly List<OurHero> _ourHeroesList;
public OurHeroService()
{
_ourHeroesList = new List<OurHero>()
{
new OurHero(){
Id = 1,
FirstName = "Test",
LastName = "",
isActive = true,
}
};
}
步骤9.在 Program.cs 文件中将 OurHeroService 服务注册为单例。
//*********************** Add services to the container.***********************
builder.Services.AddSingleton<IOurHeroService, OurHeroService>();
//*********************** Add services to the container end.***********************
在.Net 8中,我们可以注册我们的服务。
- AddSingleton:应用程序中存在的单个对象
- AddScoped:一个请求对应一个实例(如果我们多次注入同一个服务,那么它将共享同一个实例。)
- AddTransient:总是创建一个新实例(如果我们多次注入相同的服务,那么它每次都会提供一个新实例。)
// Program.cs
using DotNet8WebAPI.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();
第十步. 在 OurHeroController 中注入 IOurHeroService。
- 打开 OurHeroController 文件
- 添加承包商
- 在 Contractor 中注入 IOurHeroService
// OurHeroController.cs
using DotNet8WebAPI.Services;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace DotNet8WebAPI.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class OurHeroController : ControllerBase
{
private readonly IOurHeroService _heroService;
public OurHeroController(IOurHeroService heroService)
{
_heroService = heroService;
}
}
}
第十一步,在 OurHeroController 中添加获取 API。
// OurHeroService.cs
[HttpGet]
public IActionResult Get([FromQuery] bool? isActive = null)
{
return Ok(_heroService.GetAllHeros(isActive));
}
HttpGet.它使该方法成为 GET 方法
- IActionResult:它表示动作方法的返回类型。
- [FromQuery]:表示从API查询字符串中获取该值
- _heroService.GetAllHeros (isActive):从 OurHeroService 获取所有 OurHero 数据
- Ok(对象):发送带有 200 状态代码的数据。
步骤12.添加其他操作方法
- 获取 ID — 通过 ID 获取 OurHero
- 发布 — 添加新的 OurHero
- Put — 更新 OurHero
- 删除- 根据 ID 删除 OurHero
using DotNet8API.Model;
using DotNet8API.services;
using Microsoft.AspNetCore.Mvc;
namespace DotNet8API.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
});
}
}
}
第 13 步。运行我们的 API 项目。
Visual Studio
按 F5 键盘快捷键运行我们的应用程序。
DOT NET CLI 命令
- 在cmd中打开我们的项目
- 运行“dotnet run”cmd 来启动我们的项目。
Swagger 显示所有 API 列表。
运行获取我们的 ourheros API。
- 打开“/api/OurHero”
- 点击“试用”
- 如果需要,请选择 isActive
- 点击“执行”按钮发送请求。
概括
就这样!您已经创建了一个完整的 .NET 8 Web API,用于使用内存数据库进行 CRUD 操作。您现在可以将此 API 集成到您的前端应用程序中。
第2篇:在 .Net 8 API 中实现 Entity Framework 的 Code First 方法
https://blog.csdn.net/hefeng_aspnet/article/details/143229912