asp.net

.Net Web Api常用目录结构

2025-07-30

一、基础项目结构(适合中小型项目)

MyWebApi/

├── Controllers/           # API控制器(处理HTTP请求)

│   └── WeatherController.cs

├── Models/                # 数据模型(DTOs/Entities)

│   ├── DTOs/             # 数据传输对象

│   └── Entities/         # 数据库实体

├── Services/              # 业务逻辑层

│   └── WeatherService.cs

├── Data/                  # 数据访问层(DbContext和仓储)

│   ├── AppDbContext.cs

│   └── Migrations/       # EF Core数据库迁移

├── Helpers/               # 工具类(如自定义中间件、扩展方法)

├── Properties/            # 项目属性(如launchSettings.json)

├── appsettings.json       # 配置文件

└── Program.cs             # 入口和配置


二、分层项目架构(推荐中大型项目)

示例一

MyWebApi/

├── MyWebApi.Core/        # 核心领域模型

│   ├── Entities/         # 领域实体

│   ├── Interfaces/       # 仓储和服务接口

│   └── Enums/           # 枚举类型

├── MyWebApi.Infrastructure/ # 基础设施(数据库、外部服务)

│   ├── Data/             # EF Core配置

│   ├── Repositories/     # 仓储实现

│   └── Services/         # 第三方服务集成

├── MyWebApi.Application/   # 应用层(业务逻辑)

│   ├── Services/         # 应用服务

│   └── DTOs/            # 输入/输出模型

├── MyWebApi.Web/          # Web层(API端点)

│   ├── Controllers/

│   ├── Middleware/       # 自定义中间件

│   └── Program.cs        # 入口和依赖注入配置

├── Tests/                # 单元/集成测试

│   ├── MyWebApi.Core.Tests/

│   └── MyWebApi.Web.Tests/

└── MyWebApi.sln          # 解决方案文件


核心模块说明


1、Program.cs

配置服务(依赖注入)和中间件(如Swagger、身份验证)。

2、Controllers

轻量级类,仅处理HTTP请求/响应。

3、Services

实现业务逻辑,通过依赖注入解耦。

4、Data访问层

使用Entity Framework Core或Dapper操作数据库。

5、DTOs(数据传输对象)

隔离内部实体与外部API接口,避免直接暴露数据库模型。



示例二

MyProject/

├── MyProject.WebApi/          # 表现层(HTTP接口暴露)

│   ├── Controllers/           # API控制器(处理HTTP请求/响应)‌

│   ├── DTOs/                  # 数据传输对象(输入/输出模型)‌

│   │   ├── Request/           # 请求DTO(如UserCreateRequest)‌

│   │   └── Response/          # 响应DTO(如UserResponse)‌

│   ├── Middlewares/            # 自定义中间件(异常处理、日志等)‌

│   └── Extensions/            # 扩展方法(Swagger配置、服务注册)‌

├── MyProject.Application/     # 应用服务层(业务逻辑核心)

│   ├── Services/              # 服务接口及实现(如IUserService)‌

│   ├── Interfaces/            # 服务契约(抽象接口定义)‌

│   └── Mappings/              # AutoMapper配置(Model↔DTO转换)‌

├── MyProject.Domain/          # 领域模型层(数据库实体)

│   ├── Entities/              # 数据库实体类(如User、Product)‌

│   └── Enums/                 # 枚举类型(如UserRole)‌

├── MyProject.Infrastructure/  # 基础设施层(数据访问)

│   ├── Repositories/          # 仓储接口及实现(如IUserRepository)‌

│   ├── Data/                  # DbContext及迁移配置‌

│   └── Seeders/               # 数据库初始化数据‌

└── MyProject.Tests/           # 单元测试项目‌


核心模块说明

1、WebApi层

接收HTTP请求、路由分发、响应格式化‌

2、Application层

实现业务逻辑、协调领域模型与基础设施层‌

3、Domain层

实体定义

4、Infrastructure层

仓储模式实现


跨层依赖关系

WebApi → Application‌:调用服务接口获取业务结果‌

Application → Domain‌:操作领域模型实体‌

‌Application → Infrastructure‌:通过仓储访问数据库‌

‌Infrastructure → Domain‌:实体映射到数据库表‌


三、实践开发策略

3.1 DTO与实体分离

1、请求/响应使用DTO,避免直接暴露数据库结构‌

2、通过AutoMapper实现User→UserResponse自动映射‌

3.2 依赖注入配置

// Program.cs中注册

builder.Services.AddScoped<IUserService, UserService>();

builder.Services.AddScoped<IUserRepository, UserRepository>();


3.3 统一响应格式

// WebApi层定义标准响应体

public class ApiResponse<T> {

    public int Code { get; set; }

    public T Data { get; set; }

    public string Message { get; set; }

}