万普插件库

jQuery插件大全与特效教程

搭建后台Web Api项目(.net core)_搭建后端系统

写在前面

本文我们通过 .net core 搭建 web api 项目。 即: 提供后台服务api接口。 我使用的操作系统是win10.

操作步骤

前置环境安装

1. 安装 .net core sdk

https://dotnet.microsoft.com/zh-cn/download/dotnet

安装好之后, 将其配置在系统的Path路径。

2. 安装 vs studio 2022

VisualStudioSetup.rar

3. 安装 sqlserve 2008

https://www.cnblogs.com/linhuaming/p/15819085.html

https://blog.csdn.net/weixin_43468667/article/details/89073817

搭建步骤

创建测试数据库

CREATE TABLE [dbo].[test] (
  [id] int  NOT NULL,
  [name] varchar(255) COLLATE Chinese_PRC_CI_AS  NULL,
  CONSTRAINT [PK__test__3213E83F7F60ED59] PRIMARY KEY CLUSTERED ([id])
  WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)  
  ON [PRIMARY]
)  
ON [PRIMARY]
GO

ALTER TABLE [dbo].[test] SET (LOCK_ESCALATION = TABLE)

新建web api 项目

安装EF依赖

打开NuGet包管理器

分别输入以下命令:

Install-Package Microsoft.EntityFrameworkCore.SqlServer
Install-Package Microsoft.EntityFrameworkCore.Tools

项目结构如下

配置数据库连接字符串

在appsettings.json文件中,加入数据库连接字符串:

  "ConnectionStrings": {
    "DefaultConnection": "Server=127.0.0.1;Database=hello;User Id=sa;Password=clean123;TrustServerCertificate=True;"
  },

配置好的文件如下:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "ConnectionStrings": {
    "DefaultConnection": "Server=127.0.0.1;Database=hello;User Id=sa;Password=clean123;TrustServerCertificate=True;"
  },
  "AllowedHosts": "*"
}

通过EF生成映射

在 NuGet 包管理器命令输入位置输入以下命令

 Scaffold-DbContext 'Name=ConnectionStrings:DefaultConnection' Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Context MyTestContext -DataAnnotations -UseDatabaseNames -NoPluralize -Project WebApplication1 -Force

上述命令的解释:

  1. 连接字符串:假设你的数据库连接字符串配置在 appsettings.json 文件的 ConnectionStrings:DefaultConnection 中,因此 Scaffold-DbContext 命令中的 'Name=ConnectionStrings:DefaultConnection' 是正确的。
  2. 项目名称:根据图片中项目的名称,-Project WebApplication1 这一部分表示生成的代码会与 WebApplication1 项目关联。
  3. 输出目录-OutputDir Models 表示生成的实体模型将存放在 Models 目录下,如果没有该目录,会自动创建。
  4. 上下文名称-Context MyTestContext 是上下文类的名称,你可以根据需要自定义上下文类名。
  5. 其他选项
    • -DataAnnotations:使用数据注解而不是 Fluent API。
    • -UseDatabaseNames:保持数据库表的原始名称。
    • -NoPluralize:禁止生成复数形式的实体名称。
    • -Force:强制覆盖已有的模型。

这个步骤操作之后:

项目中会生成两个文件:

他们是数据库表映射的实体类和数据库上下文类文件。 后续操作数据, 就靠这两个类了。

将MyTestContext数据库上下文类,注入到程序中。

// 配置数据库上下文,使用连接字符串
builder.Services.AddDbContext<MyTestContext>(options =>
                                             options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));

将上述的代码写入到 Program.cs 文件中。

整体的 program.cs 文件为:


using Microsoft.EntityFrameworkCore;
using WebApplication1.Models;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.


// 配置数据库上下文,使用连接字符串
builder.Services.AddDbContext<MyTestContext>(options =>
                                             options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));

builder.Services.AddControllers();

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();

修改项目的 .csproj 文件

双击如图,1的位置。 将2中的两句话写入文件。

 <!-- 添加以下两行 -->
 <DebugType>pdbonly</DebugType>
 <!-- 或者使用 full -->
 <WarningLevel>4</WarningLevel>

这个是为了解决启动的时候,提示

  1. CS1900: "Warning level must be in the range 0-4"
  2. CS1902: "Invalid option 'portable' for /debug; must be full or pdbonly"

的错误。

编写Controller代码

整体的代码如下:

using Microsoft.AspNetCore.Mvc;
using WebApplication1.Models;

namespace WebApplication1.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class MyTestController : ControllerBase
    {

        private readonly MyTestContext _context;

        // 通过构造函数注入 MyTestContext
        public MyTestController(MyTestContext context)
        {
            _context = context;
        }

        public class MyInputModel
        {
            public int Id { get; set; }
            public string Name { get; set; }
        }


        /// <summary>
        /// 测试接口
        /// </summary>
        /// <returns></returns>
        [HttpGet("GetOne")] 
        public IActionResult GetOne()
        {
            return Ok("Hello, this is GetOne!");
        }

        /// <summary>
        /// 查询所有数据
        /// </summary>
        /// <returns></returns>
        [HttpGet("GetCleanTableTest")] // 将路径设置为 api/MyTest/clean-table
        public IActionResult GetCleanTableTest()
        {
            // 查询 test 表中的所有数据
            var testData = _context.test.ToList();

            return Ok(testData); // 返回查询到的数据
        }


        /// <summary>
        /// 根据id查询数据
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpPost("GetValueById")] 
        public IActionResult GetValueById([FromBody] int id)
        {
            // 查询 test 表中的所有数据
            var testData = _context.test.Where(t => t.id == id);

            return Ok(testData); // 返回查询到的数据
        }

        /// <summary>
        /// 添加数据
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("MyAdd")]
        public IActionResult MyAdd([FromBody] MyInputModel input)
        {
            int oid = input.Id;
            string oname = input.Name;
            var oEntity = new test
            {
                id = oid,
                name = oname
            };
            // 查询 test 表中的所有数据
            _context.test.Add(oEntity);
            var res = _context.SaveChanges();

            return Ok(res); // 返回查询到的数据
        }

       /// <summary>
       /// 更新一条数据
       /// </summary>
       /// <param name="input"></param>
       /// <returns></returns>
        [HttpPost("MyUpdate")]
        public IActionResult MyUpdate([FromBody] MyInputModel input)
        {
            int oid = input.Id;
            string oname = input.Name;
            
            var entity = _context.test.FirstOrDefault(t => t.id == oid);
            if(entity != null)
            {
                entity.name = oname;
                var res = _context.SaveChanges();
                return Ok(res); // 返回查询到的数据
            }
            else
            {
                return Ok("未找到对应数据");
            }
        }

        /// <summary>
        /// 删除一条数据
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("MyDelete")]
        public IActionResult MyDelete([FromBody] MyInputModel input)
        {
            int oid = input.Id;
            string oname = input.Name;

            var entity = _context.test.FirstOrDefault(t => t.id == oid);
            if (entity != null)
            {
                _context.test.Remove(entity);
                var res = _context.SaveChanges();
                return Ok(res); // 返回查询到的数据
            }
            else
            {
                return Ok("未找到对应数据");
            }
        }
    }
}

我基本上,就是测试了一个简单的单表crud. 对于多表联合查询,可以使用Linq来编写相关代码。 (后续我会再完善一个具体的例子)

测试效果

如图, 要选择 http启动。

项目启动成功, 会自动弹出 swagger 的调用界面.

这个是接口调用测试。 可以看出, 可以从数据库中,查出数据。 你可以自己测试修改,删除, 新增等接口。

你也可以使用 postman 进行接口的调用。

源码下载

WebApplication1.zip

你可以下载这个demo. 在 vs 2022 中打开。 配置好环境即可运行。

写在最后

例子中,使用了 EF 框架。 它对数据库的操作还是比较简洁的。 基本上不用写sql, 它通过中间映射的对象, 对数据库进行操作。

例子提供的是后台的 api 接口。 前端可以使用 主流的 vue, jquery,js,css, html 等技术做页面。 只要调用后台接口就可以了。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言