.NET Core Web API开发需引入的三个基本依赖配置说明

1.数据库依赖

1.1.包名

|-----------------------------------------|-------------------------------------------------------|
| 包名称 | 作用 |
| Microsoft.EntityFrameworkCore | EF Core 核心库(提供数据库上下文、实体映射等基础能力) |
| Microsoft.EntityFrameworkCore.SqlServer | EF Core 针对 SQL Server 的驱动(让 EF 能连接 SQL Server) |
| Microsoft.EntityFrameworkCore.Tools | EF Core 工具库(提供 Add-Migration 、 Update-Database 等迁移命令) |

1.2.配置

步骤 1:添加连接字符串(appsettings.json)

appsettings.json 中添加 SQL Server 连接字符串:

cs 复制代码
{
  "ConnectionStrings": {
    "DefaultConnection": "Server=你的SQL Server地址;Database=你的数据库名;Trusted_Connection=True;TrustServerCertificate=True;"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}
  • 替换 你的SQL Server地址(本地默认 localhost 或 ./SQLEXPRESS);
  • 替换 你的数据库名(需提前在 SQL Server 中创建数据库)。

步骤 2:注册 DbContext(Program.cs)

builder.Services 中注册 EF Core 上下文(

AppDbContext):

cs 复制代码
var builder = WebApplication.CreateBuilder(args);

// 注册 EF Core 上下文,关联 SQL Server 连接字符串
builder.Services.AddDbContext<AppDbContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));

步骤 3:定义 DbContext(Data/AppDbContext.cs)

确保

Data 文件夹下的

AppDbContext.cs 正确映射数据库表:

cs 复制代码
using Microsoft.EntityFrameworkCore;
using web01.Models;

namespace web01.Data;

public class AppDbContext : DbContext
{
    public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }

    // 映射数据库表(DbSet<实体> 对应表名)
    public DbSet<Dept> Depts { get; set; }
    public DbSet<Emp> Emps { get; set; }
    // 其他表(如 Clazz、Student)按此格式添加
}

步骤 4:初始化数据库(可选:开发时用)

若需自动创建 / 更新数据库 schema,可在

Program.cs 中添加初始化逻辑:

cs 复制代码
var app = builder.Build();

// 初始化数据库(开发环境用,生产环境注释)
using (var scope = app.Services.CreateScope())
{
    var dbContext = scope.ServiceProvider.GetRequiredService<AppDbContext>();
    dbContext.Database.EnsureCreated(); // 确保数据库存在(仅创建新表,不更新已有表)
    // 或用迁移:dbContext.Database.Migrate(); // 应用所有未应用的迁移
}

app.Run();

2.Swagger(接口文档)

2.1.包名

Swashbuckle.AspNetCore

2.2.配置

步骤 1:注册 Swagger 服务(Program.cs)

在builder.Services 中添加 Swagger 相关服务(默认项目可能已包含,需确认):

cs 复制代码
var builder = WebApplication.CreateBuilder(args);

// 注册 Swagger 服务(默认已生成,确保存在)
builder.Services.AddEndpointsApiExplorer(); // 支持端点探索
builder.Services.AddSwaggerGen(options => {
    // 可选:配置 Swagger 文档信息(如标题、版本)
    options.SwaggerDoc("v1", new() { 
        Title = "你的 API 名称", 
        Version = "v1" 
    });
});

步骤 2:启用 Swagger 中间件(Program.cs)

在中间件管道中启用 Swagger 页面和 JSON 文档:

cs 复制代码
var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger(); // 启用 Swagger JSON 文档
    app.UseSwaggerUI(options => {
        options.SwaggerEndpoint("/swagger/v1/swagger.json", "你的 API v1"); // 配置文档入口
    }); // 启用 Swagger UI 页面
}

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();

3.Serilog 日志

3.1.包名

Serilog.AspNetCore

3.2.配置

步骤 1:编写 Serilog 配置(Program.cs 顶部)

Program.cs 最顶部添加日志配置(输出到控制台和每日滚动文件):

cs 复制代码
using Serilog;

// 配置 Serilog(先于其他代码执行)
Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Information() // 最低日志级别(Debug/Info/Warn/Error/Fatal)
    .WriteTo.Console() // 输出到控制台
    .WriteTo.File(
        path: "logs/app.log", // 日志文件路径
        rollingInterval: RollingInterval.Day, // 按天切割文件
        retainedFileCountLimit: 30, // 保留最近 30 天的日志
        outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level:u3}] {Message:lj}{NewLine}{Exception}" // 日志格式
    )
    .CreateLogger();

var builder = WebApplication.CreateBuilder(args);

步骤 2:启用 Serilog(Program.cs)

在主机配置中启用 Serilog,替换默认日志系统:

cs 复制代码
var builder = WebApplication.CreateBuilder(args);

// 启用 Serilog(关键:替换默认日志)
builder.Host.UseSerilog();

步骤 3:在代码中使用日志(示例:DeptController.cs)通过依赖注入

ILogger 使用 Serilog:

cs 复制代码
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using web01.Data;
using web01.Models;

namespace web01.Controllers;

[Route("api/[controller]")]
[ApiController]
public class DeptController : ControllerBase
{
    private readonly ILogger<DeptController> _logger;
    private readonly AppDbContext _dbContext;

    public DeptController(ILogger<DeptController> logger, AppDbContext dbContext)
    {
        _logger = logger;
        _dbContext = dbContext;
    }

    [HttpGet]
    public async Task<ActionResult<IEnumerable<Dept>>> GetAll()
    {
        _logger.LogInformation("开始查询所有部门");
        var depts = await _dbContext.Depts.ToListAsync();
        _logger.LogDebug($"查询到 {depts.Count} 个部门");
        return Ok(depts);
    }
}

效果验证启动项目后,控制台和

logs/app.log 文件会输出类似以下日志:

cs 复制代码
2025-10-15 16:20:00.123 [INF] 开始查询所有部门
2025-10-15 16:20:00.456 [DBG] 查询到 5 个部门
相关推荐
flysh056 小时前
如何利用 C# 内置的 Action 和 Func 委托
开发语言·c#
逑之7 小时前
C语言笔记1:C语言常见概念
c语言·笔记·c#
福大大架构师每日一题8 小时前
2026年1月TIOBE编程语言排行榜,Go语言排名第16,Rust语言排名13。C# 当选 2025 年度编程语言。
golang·rust·c#
wangnaisheng8 小时前
【C#】gRPC的使用,以及与RESTful的区别和联系
c#
JosieBook8 小时前
【开源】基于 C# 和 Halcon 机器视觉开发的车牌识别工具(附带源码)
开发语言·c#
龙潜月七8 小时前
做一个背单词的脚本
数据库·windows·c#·aigc·程序那些事
我科绝伦(Huanhuan Zhou)8 小时前
DM数据库物理存储结构深度解析与理论实践
数据库·oracle
寻星探路8 小时前
【Python 全栈测开之路】Python 基础语法精讲(一):常量、变量与运算符
java·开发语言·c++·python·http·ai·c#
故事不长丨9 小时前
深度解析C#文件系统I/O操作:File类与FileInfo类的核心用法与场景对比
c#·文件系统·file·fileinfo·i/o操作·i/o流
Vicky-Min10 小时前
NetSuite Credit Memo导入的基础CSV模板
oracle·erp