发布于 2026-01-06 0 阅读
0

ASP.NET Core 5 REST API 逐步教程

ASP.NET Core 5 REST API 逐步教程

在这篇文章中,我们将创建一个简单的 Asp.Net Core Rest API 待办事项应用程序,用户可以在其中添加、编辑、删除和查看待办事项,我们将使用 SQLite 来存储数据。

您也可以在 YouTube 上观看完整的分步视频:

同时,您也可以下载源代码:
https://github.com/mohamadlawand087/v6-RestApiNetCore5

这是 API 开发系列的第一部分:

替代文字

开始之前我们需要准备以下4样东西:

下载并安装完所有必需的工具后,我们需要确保 .NET SDK 已成功安装。为此,我们需要打开终端,并通过检查 .NET 版本来确认 .NET SDK 是否已成功安装。

打开终端,输入以下命令

dotnet --version
Enter fullscreen mode Exit fullscreen mode

现在我们需要安装实体框架工具。

dotnet tool install --global dotnet-ef
Enter fullscreen mode Exit fullscreen mode

完成后,我们需要创建我们的应用程序。

   dotnet new webapi -n "TodoApp" -lang "C#" -au none
Enter fullscreen mode Exit fullscreen mode

现在让我们添加使用 EntityFramework 和 SQLite 所需的软件包。

dotnet add package Microsoft.EntityFrameworkCore.Sqlite
dotnet add package Microsoft.EntityFrameworkCore.Tools
Enter fullscreen mode Exit fullscreen mode

现在我们打开 VS Code,检查一下我们的应用程序和源代码,然后构建应用程序,看看它是否能运行。

dotnet build
dotnet run
Enter fullscreen mode Exit fullscreen mode

首先,我们移除.Net Core框架为我们生成的默认模板代码。这将删除WeatherForcastController和WeatherForcast类。

我们将创建自己的控制器,并将其命名为 TodoController。

我们将创建第一个简单的操作,并将其命名为 TestRun,现在开始编写控制器代码。

[Route("api/[controller]")] // We define the routing that our controller going to use
[ApiController] // We need to specify the type of the controller to let .Net core know
public class TodoController : ControllerBase
{
        [Route("TestRun")] // define the routing for this action
    [HttpGet]
    public ActionResult TestRun()
    {
        return Ok("success");
    }
}
Enter fullscreen mode Exit fullscreen mode

添加完成后,我们需要进行测试。为此,我们需要执行以下操作:

dotnet build
dotnet run
Enter fullscreen mode Exit fullscreen mode

应用程序运行后,我们需要打开 Postman 并在那里进行尝试,看看是否能收到响应。

我们在 Postman 中创建一个新请求,并将类型设置为 GET,然后添加以下 URL:

https://localhost:5001/api/todo/)testrun如您所见,我们的测试在 Postman 中得到了成功响应。

测试完成后,我们需要开始添加模型。我们在根目录下创建一个名为 models 的文件夹,并在其中添加一个名为 Item 的类。这是一个非常简单的模型,代表我们的待办事项列表项。

public class ItemData
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Details { get; set; }
    public bool Done { get; set; }
}
Enter fullscreen mode Exit fullscreen mode

添加完模型后,接下来需要构建 ApiDbContext。我们需要在根目录下创建一个名为 Data 的文件夹,并在该文件夹内创建一个名为 ApiDbContext 的新类。

public class ApiDbContext: DbContext
{
    public DbSet<ItemData> Items {get;set;}

    public ApiDbContext(DbContextOptions<ApiDbContext> options) : base(options)
    {

    }

}
Enter fullscreen mode Exit fullscreen mode

我们需要在 appsettings.json 应用程序中指定连接字符串。

"ConnectionStrings": {
    "DefaultConnection": "DataSource=app.db;Cache=Shared"
  },
Enter fullscreen mode Exit fullscreen mode

一旦我们的 DbContext 和连接字符串准备就绪,接下来我们需要更新启动类,以便在应用程序内部使用 Application DbContext。打开根文件夹中的启动类,并添加以下代码。

services.AddDbContext<ApiDbContext>(options =>
                options.UseSqlite(
                    Configuration.GetConnectionString("DefaultConnection")));
Enter fullscreen mode Exit fullscreen mode

添加 DbContext 中间件后,我们需要添加初始迁移来创建数据库。

dotnet ef migrations add "Initial Migrations"
dotnet ef database update
Enter fullscreen mode Exit fullscreen mode

数据库更新成功完成后,我们可以看到一个名为 migrations 的新文件夹,其中包含负责创建数据库及其表 Item 的 C# 脚本。我们可以通过在根目录中看到 app.db 文件来验证数据库是否已创建。此外,我们还可以使用 SQLite 浏览器来验证表是否已成功创建。

现在我们已经完成了控制器的所有基础架构工作。接下来我们需要开始构建 TodoController 并将其连接到 ApiDbContext。

首先,我们将把“获取待办事项”添加到我们的待办清单中。

[Route("api/[controller]")]
[ApiController]
public class TodoController : ControllerBase
{
    private readonly ApiDbContext _context;

    public TodoController(ApiDbContext context)
    {
        _context = context;
    }

    [HttpGet]
    public ActionResult GetItems()
    {
        var items = _context.Items.ToList();
        return Ok(items);
    }

    [HttpGet("{id}")]
    public async Task<IActionResult> GetItem(int id)
    {
        var item = await _context.Items.FirstOrDefaultAsync(z => z.Id == id);

        if(item == null)
            return NotFound();

        return Ok(item);
    }

    [HttpPost]
    public async Task<IActionResult> CreateItem(ItemData data)
    {
        if(ModelState.IsValid)
        {
           await _context.Items.AddAsync(data);
           await _context.SaveChangesAsync();

            return CreatedAtAction("GetItem", new {data.Id}, data);
        }

         return new JsonResult("Somethign Went wrong") {StatusCode = 500};
    }

    [HttpPut("{id}")]
    public async Task<IActionResult> UpdateItem(int id, ItemData item)
    {
        if(id != item.Id)
            return BadRequest();

        var existItem = await _context.Items.FirstOrDefaultAsync(z => z.Id == id);

        if(existItem == null)
            return NotFound();

        existItem.Title = item.Title;
        existItem.Details = item.Details;
        existItem.Completed = item.Completed;

        await _context.SaveChangesAsync();

                // Following up the REST standart on update we need to return NoContent
        return NoContent();
    }

    [HttpDelete("{id}")]
    public async Task<IActionResult> DeleteItem(int id)
    {
        var existItem = await _context.Items.FirstOrDefaultAsync(z => z.Id == id);

        if(existItem == null)
            return NotFound();

        _context.Items.Remove(existItem);
        await _context.SaveChangesAsync();

        return Ok(existItem);
    }
}
Enter fullscreen mode Exit fullscreen mode

我们可以用 Postman 测试这些功能。

最后,由于我们在创建 Web API 项目时使用的是 .Net 5,Swagger 将已经集成到我们的应用程序中,为了查看 Swagger 界面,我们需要访问 ( http://localhost:5000/swagger/index.html ) 。

Swagger 允许您描述 API 的结构,以便机器可以读取它们。除了在旧版本的 .NET Core 中定义 Swagger 之外,我们无需进行任何额外工作。Swagger 能够读取我们的 API 结构,并为我们提供一个可用于增强开发体验的 UI。

感谢您阅读本文。

这是 API 开发系列的第一部分:

文章来源:https://dev.to/moe23/asp-net-core-5-rest-api-step-by-step-2mb6