eShopOnWeb入门指南:ASP.NET Core 8.0单体参考应用的终极学习地图
【免费下载链接】eShopOnWebSample ASP.NET Core 8.0 reference application, now community supported: https://github.com/NimblePros/eShopOnWeb项目地址: https://gitcode.com/gh_mirrors/es/eShopOnWeb
eShopOnWeb是微软出品的 ASP.NET Core 8.0 单体(monolithic)参考应用,一个可以跑起来的完整在线书店。它演示了企业级 Web 应用的分层架构、Entity Framework Core、身份认证、Blazor Server 管理后台等核心技能,是新手学习 .NET 后端开发的绝佳地图。
一、eShopOnWeb 是什么?适合谁学?
一句话概括:一个功能完整的在线书店示例项目,包含浏览商品、购物车、下单、用户登录注册、管理员商品维护等真实电商核心链路 🛒。
它背后的价值在于:
- 📖 配套一本免费电子书《Architecting Modern Web Applications with ASP.NET Core and Azure》,本书的代码实践就是基于这个项目;
- 🏛️ 演示单体架构的完整落地方式(区别于微服务的 eShopOnContainers 项目);
- 🧪 自带单元测试、集成测试、功能测试三大测试工程,教你"测试怎么做"而不只是"代码怎么写"。
提示:项目定位是架构学习,不是电商生产参考,因此不追求功能齐全(比如没有真实支付)。
二、解决方案结构速览:5分钟看懂 7 个工程
打开 Everything.sln 或 eShopOnWeb.sln,你会看到清晰的"分层"组织,这正是本项目的学习重点:
| 工程 | 职责 | 关键看点 |
|---|---|---|
| src/Web/ | MVC 主站点(商城前台) | 页面模型、MediatR 请求管道、健康检查 |
| src/PublicApi/ | 独立 API 服务 | 基于 Endpoints 模式的 REST API + Swagger |
| src/BlazorAdmin/ | Blazor Server 管理后台 | 商品增删改查、缓存装饰器、Toast 提示 |
| src/ApplicationCore/ | 领域核心层 | 实体、仓储接口、Specification 查询规格 |
| src/Infrastructure/ | 基础设施层 | EF Core 数据访问、Identity 身份、邮件服务 |
| tests/ | 测试工程 | 单元 / 集成 / 功能测试 + 对象构建器 |
| infra/ | Azure 部署 | Bicep 基础设施即代码 |
架构分层思想一图流:Web(表现层)→ ApplicationCore(领域层)← Infrastructure(基础设施层),依赖始终朝领域核心汇聚,这是干净架构(Clean Architecture)的经典实践。
值得细读的几个入口文件:
- src/Web/Program.cs:一站式看 DI 注册、Cookie 认证、Identity、健康检查、Blazor 服务如何装配;
- src/ApplicationCore/Interfaces/IRepository.cs:仓储接口的定义;
- src/Infrastructure/Data/EfRepository.cs:仓储的 EF Core 实现,配合 Specification 模式做查询;
- src/PublicApi/Program.cs:独立 API 的启动配置。
三、快速上手:本地跑通 eShopOnWeb 的 5 个步骤
1. 克隆仓库
git clone https://gitcode.com/gh_mirrors/es/eShopOnWeb2. 安装 .NET 8 SDK
global.json 已锁定 SDK 版本为8.0.x,安装 8.0 版本即可,无需其他依赖。
3. 配置数据库
默认连接字符串在 src/Web/appsettings.json,指向本地 SQL Server。懒人方案:在appsettings.json中加入"UseOnlyInMemoryDatabase": true,即可使用内存数据库,免去装数据库的麻烦 🎉。
4. 执行数据库迁移
持久化场景下需先运行 EF 迁移,创建"商品目录库"和"用户身份库"两个数据库:
cd src/Web dotnet tool restore dotnet ef database update -c catalogcontext -p ../Infrastructure/Infrastructure.csproj -s Web.csproj dotnet ef database update -c appidentitydbcontext -p ../Infrastructure/Infrastructure.csproj -s Web.csproj5. 启动双服务并访问
商城前台和管理后台依赖两个进程(见 docker-compose.yml 中eshopwebmvc与eshoppublicapi的组合):
# 终端 1:先启动 PublicApi cd src/PublicApi && dotnet run # 终端 2:再启动主站点 cd src/Web && dotnet run --launch-profile Web- 商城主页:
https://localhost:5001/ - Blazor 管理后台:
https://localhost:5001/admin - API 的 Swagger:
https://localhost:5099/swagger
首次启动会自动写入种子数据(迁移见 src/Infrastructure/Data/Migrations/ 与 src/Infrastructure/Identity/Migrations/),你可以直接用demouser@microsoft.com账号登录体验下单流程。
四、三种运行方式对比,选一个适合你的
| 方式 | 适用场景 | 特点 |
|---|---|---|
本地dotnet run | 想逐行调试源码 | 最灵活,注意先停进程再构建,否则文件锁定 |
| Docker Compose | 环境不想折腾 | docker-compose build+docker-compose up,Web 在 5106 端口、API 在 5200 端口 |
| Dev Container | 零基础/跨平台 | .devcontainer/devcontainer.json 基于官方 .NET 8 镜像,开箱即用,零本地安装 |
Docker 方式细节见 src/Web/Dockerfile 和 src/PublicApi/Dockerfile。
五、核心技术栈与学习路线建议
项目用到的关键技术(版本统一在 Directory.Packages.props 集中管理,这本身也是 .NET 8 的"中央包版本管理"最佳实践):
- MVC + Razor Pages:商城页面(src/Web/Pages/)
- Entity Framework Core 8+ Specification 模式:数据访问
- ASP.NET Core Identity:登录注册,代码见 src/Infrastructure/Identity/
- Blazor Server:管理后台(src/BlazorAdmin/Pages/CatalogItemPage/ 下有完整的商品 Create/Edit/Delete 页面)
- MediatR:CQRS 式请求处理,如 src/Web/Features/MyOrders/GetMyOrders.cs
- Ardalis.ApiEndpoints:类式 REST API,与控制器写法对照学习(src/PublicApi/README.md)
- xUnit / MSTest + NSubstitute:三大测试工程
推荐学习路线(由浅入深):
- 🚪 先跑起来,把逛店→加购→结算→登录整条流程走一遍;
- 📦 阅读 src/ApplicationCore/,理解实体(Basket、Order)如何建模,src/ApplicationCore/Specifications/ 的查询规格怎么复用;
- 🗄️ 再看 src/Infrastructure/,看接口如何被 EF Core 实现;
- 🧩 对照 src/Web/Controllers/ 与 src/PublicApi/ 两种 API 写法;
- 🧪 最后读 tests/,学习"如何给上述代码写测试"。
六、常见问题 FAQ
Q1:启动后页面打不开?检查是否两个进程都在运行——管理后台(Blazor)依赖 PublicApi 提供数据,只起 Web 会出现功能缺失。
Q2:登录一直失败?试试新的无痕浏览器窗口,通常是 Cookie 残留导致;确认种子数据已写入(首次启动自动完成)。
Q3:想要中文或更多功能版本?可在社区扩展方向上探索,比如 VB.NET 移植版、F# 版(见 README.md 的 Community Extensions 一节)。
Q4:部署到 Azure 要怎么做?项目自带 infra/main.bicep 与 azure.yaml,支持通过 Azure Developer CLI(azd)一键开通资源并部署,详见 README.md 中 "Running the sample using Azd template" 部分。
eShopOnWeb 不只是一个 Demo,更是一张ASP.NET Core 8.0 企业级单体应用的学习地图:跑通它、读懂分层、仿写一个自己的小电商,你就已经迈过了 .NET 后端的新手门槛 🎯
【免费下载链接】eShopOnWebSample ASP.NET Core 8.0 reference application, now community supported: https://github.com/NimblePros/eShopOnWeb项目地址: https://gitcode.com/gh_mirrors/es/eShopOnWeb
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考