尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

基于C# NetCore+原生微信小程序的商城系统实战指南

基于C# NetCore+原生微信小程序的商城系统实战指南 简介这是一套基于C#与.NET Core后端技术、原生微信小程序前端构建的商用级多店铺商城系统面向具备C#和小程序开发基础的中高级开发者用于快速搭建支持分销运营与精细化管理的电商解决方案。资源包共1962个文件涵盖789个C#业务逻辑文件如OrderController、PluginManager等、218个JS交互脚本、188个PNG图标资源、147个CSHTML管理后台视图及43个WXML小程序页面结构整体压缩后仅10.33MB结构清晰、模块解耦便于二次开发与功能扩展。已有1270人学习下载可直接获取完整前后端代码、多店铺与三级分销核心实现、物流调度、优惠券与积分体系、促销插件化管理等全套商用能力尤其适合电商类毕业设计、创业项目原型或企业内部系统快速落地。 你手里拿到一份“基于C#的小程序商城原生微信小程序NetCore技术构建.zip”这样的源码包或者准备按这个技术路线从零搭一套商城那这篇文章就是写给你看的。先说结论这个组合在当下依然站得住脚原生小程序保证体验和稳定性C#的NetCore在后端开发效率和性能之间取得了很实用的平衡。我会结合这套技术栈的实际运作方式把项目怎么拆、怎么跑、怎么布、怎么排坑一步步讲透。这个内容不只是给后端看的前端小程序开发、接外包的独立开发者、想转行做全栈的人都能从这里拿走一套完整的参考方案。读完你至少能做到拿到源码包后能快速理清结构、跑通本地环境、上架部署并且遇到典型的商城问题时能按图索骥排查。1. 项目整体思路为什么是这个技术组合先聊最核心的问题一个商城项目前端为什么选原生微信小程序而不是uni-app或者Taro后端为什么选C# NetCore而不是Java Spring Boot或者Node.js。这背后不是拍脑袋而是和项目定位、团队构成、长期维护成本直接挂钩的。1.1 原生微信小程序框架选型的真实考量原生小程序和跨端框架的最大区别在于你写的是微信官方定义的那套WXML、WXSS和JavaScript运行时而不是通过编译层转换。跨端框架追求的是一套代码多端复用听着省事但代价是遇到平台差异时经常要做条件编译一旦涉及微信特有的能力比如订阅消息、微信支付、跳转公众号文章、手机号快捷验证那一层封装反而变成绕不开的障碍。商城类的项目有个特点交易链路长、状态复杂、对稳定性的要求极高。你用原生小程序写商品列表、SKU选择器、购物车、订单结算、支付回调每一步都能直接对照官方文档不会出现编译层吃掉某些API参数这种隐性问题。而且原生小程序包体小、渲染链路短在低端安卓机上的表现明显比跨端框架更稳。这个优势在做秒杀、抢购这类高交互页面时尤其重要。再一个大实话因素招聘和外包成本。原生微信小程序开发者的基数极大任何一个会前端的人稍微上手就能改WXML和JS而跨端框架需要专门的学习成本很多小团队的“临时工”根本接不住。如果你拿到这套源码是要交付给别人的原生意味着客户以后请任何人维护都能接手不会被某一套框架绑架。1.2 C# NetCore后端选型的决定性因素C#在商业项目里经常被低估但实际上NetCore这套运行时现在已经非常成熟。跨平台、高性能、统一的编程模型配合Visual Studio家族的工具链开发效率在同类技术栈里处于第一梯队。选NetCore做商城后端几个硬性优势性能与资源消耗的平衡Kestrel服务器的吞吐量在TechEmpower基准测试里常年位居前列同时内存占用比Java生态低不少。小规模部署成本很低单台2核4G的云服务器就能支撑一个中小商城的日常流量。强类型语言带来的安全感商城涉及金额、库存、订单状态机C#的强类型特性让编译器帮你拦截大量低级错误。尤其当你用EF Core这种ORM时Lambda表达式直接映射为SQL很多运行时错误提前到编译期就能暴露。生态成熟Swagger接口文档、Serilog日志、Redis缓存、RabbitMQ消息队列、支付SDK随手都能找到高质量库。NuGet的包管理体系比npm要克制得多至少不会出现“一个包依赖几百个传递依赖”的噩梦。从长期维护角度看NetCore的版本迭代路径清晰.NET 6/8都是LTS版本修复周期长。商城这种要长期运行的系统最忌讳底层框架快速变更LTS策略让团队有充足的时间平滑升级。Java其实也能做但如果你团队里没人熟悉Java那套繁重的配置体系C#的“约定优于配置”风格能省下大量重复劳动。2. 架构分层与核心模块拆解一个完整的商城项目拿到手之后第一件事不是急着跑而是先看懂它的分层结构。这套代码如果组织得好你改起来心里就有底如果组织得烂那再好的技术选型也白搭。2.1 后端分层从 Controller 到仓储的职责划分正规NetCore商城项目一般按经典三层或多层架构组织。我以一份高质量的实战项目结构为例你会看到这样一组项目引用Solution ├─ src │ ├─ Shop.Api // WebAPI项目对外提供REST接口 │ ├─ Shop.Application // 应用层承载业务用例下单、支付、退款等 │ ├─ Shop.Domain // 领域层定义实体、枚举、业务规则 │ ├─ Shop.Infrastructure // 基础设施层EF Core、Redis、文件存储 │ └─ Shop.Shared // 公共层DTO、工具类、常量 └─ tests └─ Shop.UnitTests // 单元测试项目你可能会问一个小商城需要分这么多层吗答案是看场景。如果只是快速交付一个DemoController里直接写业务也不是不行但一旦业务开始膨胀——新增优惠券、分销、多商户——没有清晰边界的代码会很快就变成泥球。尤其客户在验收后又提需求这是外包和自营项目的常态分层是给未来的自己留的退路。Api层的Controller只做三件事接收参数、校验参数、调用Application层的方法并返回结果。Domain层负责核心业务规则比如“订单金额必须大于0”“已支付订单不能再次取消”。Infrastructure落地上要避免反向依赖所有接口都定义在Domain或Application里这样才能真正解耦。商品、订单、用户、购物车、支付这五个模块在商城项目里是绝对核心。每一块都要有清晰的领域对象模拟真实世界的业务场景。比如订单有一个状态字段从“待支付”到“已支付”再到“已发货”“已完成”“已取消”这不应该是一个随意赋值字符串而应该用枚举或者状态模式去管理。我看到很多新手项目把订单状态写成int的数字魔法值注释一丢三个月后没人知道3是什么意思要避免这种写法。2.2 小程序前端目录结构与页面流转原生微信小程序的目录结构通常是这样的每个页面一个文件夹页面文件由.js、.wxml、.wxss、.json四个文件组成。商城项目的典型页面清单miniprogram/ ├─ pages/ │ ├─ index/ // 首页 │ ├─ category/ // 分类页 │ ├─ cart/ // 购物车 │ ├─ user/ // 个人中心 │ ├─ goods/ │ │ ├─ list/ // 商品列表 │ │ └─ detail/ // 商品详情 │ ├─ order/ │ │ ├─ confirm/ // 确认订单 │ │ ├─ list/ // 订单列表 │ │ └─ detail/ // 订单详情 │ └─ address/ // 收货地址管理 ├─ components/ // 公共组件SKU弹窗、数量步进器、空状态 ├─ utils/ // 请求封装、工具函数 ├─ app.js ├─ app.json └─ app.wxss页面流转一定有一条主线用户逛首页或者分类页进入商品详情选好SKU后加购或者立即购买去购物车结算确认订单选择地址提交订单并支付然后在订单列表里跟踪物流状态。这套链路看似常规但每个环节都有细节要注意。比如商品详情的SKU选择器前端不能只拿一个商品ID就完事后端返回的应该是一个商品SPU底下挂多个SKU每个SKU有自己的价格、库存、规格属性组合。前端在用户选择颜色和尺码时要实时计算当前的库存和价格。我见过不少项目直接在页面上写死所有规格组合一旦规格多了页面代码就爆炸正确做法是把SKU数据交给一个独立的component去管理逻辑隔离利于复用。购物车也不只是“把商品加到列表”。它要维护商品的选中状态、数量变化、库存校验、失效商品标记。这些状态最好在全局Store里统一管理我习惯用小程序自带的getApp().globalData配合本地缓存简单场景够用复杂场景再引入mobx-miniprogram或者自己实现一个轻量订阅模式。不需要一上来就上Redux原生小程序的项目要保持轻量。2.3 核心交易链路设计商品、购物车、订单、库存交易链路是商城的心脏。这一节把涉及的核心机制一次讲清楚特别是几个容易做错的地方。商品模块商品详情接口返回的数据除了标题、轮播图、详情富文本还要包含SKU列表每个SKU的价格、库存、规格值、销量、评价数、是否上架等信息。这里的性能关键点SKU列表不要每次从数据库实时查一遍商品的访问频率远高于下单频率必须走Redis缓存。缓存key可以设计成goods:detail:{id}商品后台编辑时主动删除缓存下次请求自动回源数据库重建。购物车逻辑购物车表的核心字段是用户ID、SKU ID、数量、选中状态。加购接口要做两个判断SKU是否还有库存、当前数量是否超过购物车限购数量。这里的并发问题在后面章节详细说。购物车列表展示时前端要把所有购物车项汇总成一个请求POST /api/cart/list用购物车项ID数组或者一次全量查询而不是一个商品发一个请求否则接口性能和用户体验都会很难看。订单状态机这是整个商城最容易出bug的地方。订单从创建开始可能经历的状态至少包括待支付、已支付/待发货、已发货/待收货、已完成、已取消、售后中/退款中、已退款。状态流转不是任意跳的比如“已发货”的订单理论上不能直接变成“已取消”除非走了退货流程。所以后端一定要用状态机模式来做约束不要写散落的if-else。我打一个比方订单状态就像是高铁列车的轨道从A站到B站有固定的铁轨连接列车不能脱离轨道乱跑状态机就是那套轨道信号系统你强行去扳道岔它就会抛异常告诉你“当前状态不允许这个操作”。库存扣减这是商城项目最经典的并发难题。高并发秒杀场景下绝不能先查库存再判断“库存大于0就减一”因为两个请求可能同时读到库存1都以为能买最后超卖。正解是使用数据库原子操作一条SQL完成条件扣减UPDATE sku SET stock stock - 1 WHERE id skuId AND stock 1如果影响行数大于0说明扣减成功否则说明库存不足直接返回“手慢了”。下单要配合订单表创建放在同一个数据库事务里保证“扣库存”和“创建订单”要么都成功要么都回滚。Redis可以做前置库存预热和流量削峰但最终一致性要对账不能只依赖Redis里的数字。支付回调微信支付成功后会异步回调你配置的Notif yUrl这个回调里要做的事情是验签、更新订单为已支付、扣减库存如果不提前扣、通知商户后台。这里最关键的幂等逻辑是“一个订单的支付回调重复处理不能产生副作用”。微信支付服务器可能因为网络原因多次推送同一个支付成功的通知你的回调接口必须保证即使被调用多次订单状态也只从“待支付”变为“已支付”一次。最稳妥的做法是在更新订单前先检查订单当前状态已经为“已支付”就直接返回成功。3. 从零到一搭建环境与跑通项目光看代码不动手是学不会的。这一章是实战章节从拿到源码包到本地把项目跑步起来我会把每一步拆开讲包括工具的选型、配置的注意点、以及我第一次跑的时候踩过的坑。3.1 本地开发环境准备先把工具装齐版本尽量贴近生产环境。我在开发机上通常这么配工具推荐版本说明Visual Studio 202217.8或者用VS Code加C# Dev Kit插件但调试体验VS更好.NET SDK6.0 / 8.0 LTS在项目里看清目标框架版本global.json或项目文件里写得很清楚SQL Server2019 / LocalDB也可以换成MySQL前提是Docker或者本地装了服务Redis7.x / 6.xWindows下可以用Memurai代替或者用Docker容器跑微信开发者工具最新稳定版注意使用“不使用代理”或正确配置代理模式否则登录授权可能失败Git最新拿源码、管理自己的改动都离不开装好之后先确认SDK的版本和项目文件要求一致。很多新手的第一个坑就是“我装了.NET 8项目却提示需要.NET 6”打开.csproj文件看TargetFramework节点就能确认。如果项目里同时有多个目标框架或者你本地装了几个版本需要在存储库根目录放一个global.json来锁定SDK版本否则编译行为是不可预期的。3.2 配置数据库与初始化脚本数据库表结构通常由EF Core的迁移文件生成或者项目里带了初始化SQL脚本。先打开appsettings.json找到ConnectionStrings节点改成你本地数据库的连接字符串。一个典型的配置长这样{ ConnectionStrings: { Default: Serverlocalhost;DatabaseShopDB;User Idsa;PasswordYourPassword;TrustServerCertificateTrue; }, Redis: localhost:6379 }如果项目使用EF Core迁移终端执行dotnet ef database update如果你拿到的项目只提供了init.sql直接在SQL Server Management Studio里执行整个脚本就行。执行完后把关键表的字段扫一遍至少知道Users、Goods、Sku、Orders、OrderItem、Cart这几张核心表长什么样。这个习惯很重要后面排bug的时候你往往要先想“数据库里这笔记录此刻是什么状态”然后才能定位是代码逻辑问题还是数据问题。3.3 API调试与登录鉴权接入后端项目通常自带Swagger启动API项目后访问/swagger就能看到所有接口。先找一个免登录的接口试试比如获取商品列表确认环境通不通。商城的多数接口是需要登录态的这里涉及到微信小程序的登录协议。完整流程是小程序端调用wx.login()拿到一个临时code发送到后端/api/auth/login后端用这个code去微信的jscode2session接口换取openid和session_key再用openid查询本地用户表如果不存在就自动注册一个新用户最后返回一个自定义的token给前端。后续请求都在Header里带Authorization: Bearer {token}后端的JWT中间件负责解析并识别用户身份。这里有个安全细节千万不要信任前端传来的用户身份字段比如“userId123”一切以token解析后的用户为准。商城的正面战场是支付和订单用户身份伪造是底线问题。另外code是5分钟有效的一次性凭证后端换取过openid后就不能再换第二次所以后端拿code换session的接口要做去重处理防止并发重复请求时用同一个code各换一次。那个细节常见于“同一请求被前端重复触发”、“点击登录按钮两次”等场景。JWT配置里还有一个要点把expires过期时间设置成合理的值。太短用户要频繁重新登录体验差太长token被窃取的风险就大。商城场景我一般设7天配合RefreshToken做自动续签但这个属于进阶玩法初版可以不做。3.4 小程序端对接修改配置、编译运行后端跑起来之后打开微信开发者工具导入小程序源代码目录。需要修改的关键配置app.js或在专门的config.js里找到baseUrl把后端的地址填上。本地调试时你的后端运行在https://localhost:5001这种地址上小程序端请求时要注意两个坑一是微信开发者工具里要勾选“不校验合法域名、web-view业务域名、TLS版本以及HTTPS证书”否则本地开发环境直接报错二是真机预览时你手机上访问不到你电脑上的localhost需要把baseUrl改成电脑的局域网IP比如http://192.168.1.100:5001同时保证手机和电脑在同一个WiFi并且防火墙放行了对应端口。app.json里检查pages字段是否配置了所有页面路径window配置控制顶部导航栏样式。在微信公众平台申请一个测试号或者使用自己的AppID填在开发者工具的“项目设置”里。测试号不能使用微信支付等高级能力但页面调试、接口联调都没问题。编译运行后会看到小程序首页从后端拉取商品数据。如果白屏打开开发者工具的Debugger看Network面板里有没有请求发出、返回状态码是多少。最常见的问题是请求发出去了但返回了401或者500那问题在后端如果连请求都没发出来先查baseUrl配没配对再查域名白名单和小程序基础库版本。4. 上线部署与生产环境避坑本地跑通只是第一步真正的考验是发布到云服务器。很多项目本地一切正常一上线就各种问题区别就在于生产环境和开发环境有本质不同没调试器、没日志走廊、带宽有限、并发突增。这一章把从本地到线上的每一步和避坑点讲透。4.1 Linux部署与进程守护NetCore的最大好处是跨平台。生产环境我强烈建议上Linux服务器比如CentOS 7/8或者Ubuntu 20.04/22.04配合Nginx反向代理。相比Windows ServerLinux成本更低、稳定性更好、被扫描攻击的面更小。发布流程# 本地执行发布命令runtime参数决定是否自包含 dotnet publish -c Release -r linux-x64 --self-contained false -o ./publish然后把整个publish目录上传到服务器比如放到/var/www/shopapi。运行cd /var/www/shopapi chmod x Shop.Api ./Shop.Api --urls http://0.0.0.0:5000这里解释一下--urls参数默认Kestrel监听localhost:5000但你从外部访问不到必须监听0.0.0.0表示所有网卡再搭配Nginx的反向代理对外提供80/443端口服务。不建议直接把Kestrel暴露到公网因为Kestrel本身不做完整的HTTP报头解析和访问控制Nginx在前面挡一层更安全。进程守护用Systemd创建一个服务文件[Unit] DescriptionShop API Service Afternetwork.target [Service] WorkingDirectory/var/www/shopapi ExecStart/usr/bin/dotnet /var/www/shopapi/Shop.Api.dll Restartalways RestartSec10 EnvironmentASPNETCORE_ENVIRONMENTProduction [Install] WantedBymulti-user.target然后执行systemctl daemon-reload systemctl enable shopapi systemctl start shopapi systemctl status shopapi以后更新版本时先停服、替换文件、再启动一条龙用脚本封装起来避免手动操作漏掉步骤。这一步是整个交付闭环的基础没有Systemd守护你半夜睡得正香时进程挂了客户一个电话打过来心态当场崩溃。4.2 HTTPS和合法域名配置微信小程序有一个硬性要求所有请求必须是HTTPS并且域名要到小程序后台配置到“服务器域名”白名单里。从上线那天起你的后端必须挂在一个备案过的域名下申请SSL证书可以用免费的Lets Encrypt或者云厂商的免费证书然后在Nginx里配置server { listen 443 ssl http2; server_name api.myshop.com; ssl_certificate /etc/nginx/cert/fullchain.pem; ssl_certificate_key /etc/nginx/cert/privkey.pem; location / { proxy_pass http://127.0.0.1:5000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }配置好后https://api.myshop.com要能在浏览器里直接访问到接口文档。然后把域名填进小程序后台request合法域名https://api.myshop.comuploadFile合法域名如果涉及头像、商品图片上传需要单独配置downloadFile合法域名如果涉及文件下载注意不能配置IP地址必须用域名而且域名不能带端口这是微信多年不变的规则。如果你用了http://123.123.123.123:8080这种地址就算本地调试能通发布到生产也一定被拦截。本地开发时可以在开发者工具里关掉域名校验但上线版小程序代码里就不要留这一关了。4.3 数据库与日志的日常维护商城上线后日常维护的重心在数据库和日志。生产环境的SQL Server不建议用LocalDB用一个正式的实例或者考虑MySQL。定时备份必须要有哪怕每天凌晨用备份脚本把数据库文件拷贝到OSS或者另一台服务器也行。我吃过一次亏客户半夜误操作清了订单表幸好前一天有完整备份才没有造成大事故。备份策略不用太花哨保持“最近7天全量备份隔周归档”就够一个中小商城用了。日志方面强烈建议给API项目接上Serilog配置一个滚动文件Sink和一个数据库Sink。出了线上问题第一件事不是找人“现场复现”而是去看日志。如果项目里还没有日志框架哪怕是先用Console.WriteLine加ILogger临时顶上也比什么都没有强。日志里要记录的关键信息至少包括请求路径、请求参数、处理耗时、异常堆栈、操作用户ID。有了这些大部分线上问题其实都能靠日志快速定位。还有一个容易被忽略的维护点数据库索引优化。商城表里orders表的user_id、order_no、created_atorder_item表的order_idcart表的user_id这些字段上的索引直接影响查询性能。表数据量到几十万行之后没有索引的查询就是全表扫描接口瞬间从50毫秒涨到5秒。如果发现某个查询特别慢用数据库的“执行计划”功能看一下是不是走了索引没有就补一个。5. 常见问题与排查技巧实录这是整个项目交付过程中最容易卡住人的一批问题我按主题快速梳理一遍你可以直接当一个速查手册用。5.1 真机白屏与接口请求失败真机预览白屏是开发小程序最常见的噩梦之一而且往往“模拟器上好好的真机一打开就白”。遇到这个情况按优先级排查是不是HTTPS没配好真机上小程序不校验本地开发时的“不校验合法域名”选项必须是正式域名有效的HTTPS证书。如果你还没部署到线上环境就真机预览最简单的办法是把后端地址改成局域网IP并且打开“不校验合法域名”再试一次。前提是手机和电脑同一WiFi。是不是基础库版本问题有些API是特定基础库版本才支持的比如wx.getRealtimeLogManager()要求基础库2.1.0以上。项目里如果用了某个比较新的API而真机的微信版本较旧会静默失败。是不是异步时序问题代码里有没有在wx.request的回调里执行setData更新页面原生小程序里这是异步的你需要在成功回调里做不然数据没渲染出来看起来就是白屏。控制台有没有报错真机同样可以打开调试面板VConsole会打印日志。你可以在app.js的onError里加一个上报App({ onError: function (err) { console.error(Global error:, err); } })这样至少知道问题在哪个环节。很多时候“白屏”的实际原因是入口页面数据拉取失败页面渲染时拿不到数据显示不了内容。5.2 导航栏、textarea层级与多端兼容小程序里有两个出了名的“风格”问题每个写小程序的人都会遇到。顶部导航栏高度不同手机型号的顶部状态栏高度不一样。iPhone X系列有刘海屏状态栏高度是44像素传统安卓是24像素。小程序里取状态栏高度有一个精确的方式const systemInfo wx.getWindowInfo(); const statusBarHeight systemInfo.statusBarHeight;然后在app.js里把它存到全局所有需要自定义导航栏的页面都去读取它。这里有一个坑如果你的项目里用了自定义导航栏比如宫格标题居中、背景渐变的做法需要在对应页面的json里设置navigationStyle: custom否则微信的默认导航栏会和你的自定义导航栏叠在一起页面内容整体被顶下去。textarea和原生组件的层级穿透textarea、video、map这些小程序原生组件有一个特点它们处在webview渲染层之上普通的view和cover-view很难正常覆盖它们。最典型的场景是用户填完商品备注后底部弹出一个“提交订单确认弹窗”结果弹窗里的按钮被textarea盖住了点不到。解决方案有几个一是用cover-view来覆盖但cover-view的限制也比较多二是用wx.nextTick在弹窗弹出时把textarea隐藏关闭弹窗后再显示恢复三是在不需要输入的时候就把textarea的focus设成false或者直接隐藏。实际项目中我用得最多的是第二种简单粗暴、效果稳定。5.3 支付回调、库存并发等交易链路问题交易链路的线上故障分分钟是真金白银的问题。这里把最容易翻车的几个点列出来支付回调丢单支付成功后微信异步通知发送到你配置的回调地址但如果你的回调接口因为超时、代码异常而返回了非200微信会无限重试。重试间隔会逐渐拉长但你的用户可能已经不耐烦了直接来找客诉。所以回调接口的处理原则是先落库后返回。收到通知先验签验签通过后立刻把交易流水记录写下来再异步去更新订单状态。哪怕后面更新失败你也有一张流水表可以人工补单。库存超卖前面讲过SQL原子更新是最稳的方案但要注意读多写少的热门SKU在Redis里做库存扣减时如果Redis和数据库数据不一致最终要以数据库为准。建议每笔订单在支付回调成功后再“二次确认扣减”如果数据库库存不足自动进入退款流程。这个兜底逻辑能救回很多极端并发场景下的漏子。订单重复支付用户在支付页面点击支付微信支付已经扣款成功但网络抖动导致前端没收到支付成功的回调用户又点了一次支付。你会收到两笔支付回调。除非你的业务明确允许同一订单多次支付比如充值订单否则必须做“订单号-交易号”唯一约束第二次回调直接返回“重复通知”。SQLite数据的unique index或者SQL Server的unique constraint都能实现这个不用代码做让数据库从底层挡住。5.4 开发调试的小技巧最后分享几个开发调试时的习惯动作都属于“文档里不会写、但实际很管用”的经验。小程序端抓包真机预览时接口返回不对但页面又看不到细节可以用抓包工具。微信开发者工具自带Network面板已经很好用但真机上的请求开发者工具抓不到。比较轻量的办法是用“vConsole”这样的小程序调试面板直接在页面上查看网络请求日志。也可以在真机上把基础库调试模式打开再利用微信公众平台的“真机调试”功能远程看日志。NetCore端调试技巧本地调试时尽量不要用IIS Express直接改成用Kestrel运行自己的API项目这样端口固定前端连接地址不会随意变。另外强烈建议在appsettings.Development.json里把日志级别调成Information它会输出每个SQL查询语句排查数据问题的时候效率翻倍。CLI快速验证接口不要每次都在浏览器里点Swagger调接口有些POST请求参数填写麻烦还容易点错。我习惯直接写一个PowerShell或者curl脚本放在项目根目录专门用来做支付回调、登录等敏感接口的模拟测试。比如curl -X POST https://localhost:5001/api/auth/login \ -H Content-Type: application/json \ -d {code:test_code}这个习惯能帮你把接口测试自动化掉每次改完代码一键跑一遍回归比手动点Swagger省很多时间。我在实际接手这种“原生微信小程序NetCore”商城项目时最大的感受是技术栈本身不复杂真正的复杂度在业务细节和跨端协作的地方。只要把后端的边界划分清楚、数据库索引和事务设计到位再把前端页面状态管理好这整套系统在小中型商城的体量下是完全可以稳定运行的。拿到源码包之后你花一周时间把架构读懂、把链路跑通后面的改造成本就会低很多。本文还有配套的精品资源点击获取
返回列表