You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6.0 WebAssembly客户端+服务端API项目连接MySQL无输出求助

问题排查:.NET 6 WASM + API 连接MySQL无输出问题

我正在学习.NET 6.0 WebAssembly客户端+服务端API技术,已创建对应项目并尝试连接MySQL数据库。数据库仅包含一张people表,表结构及数据如下:

-- --------------------------------------------------------
-- Host:                         localhost
-- Server version:               10.4.18-MariaDB - mariadb.org binary distribution
-- Server OS:                    Win64
-- HeidiSQL Version:             11.3.0.6295
-- --------------------------------------------------------

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET NAMES utf8 */;
/*!50503 SET NAMES utf8mb4 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

-- Dumping structure for table blazorhelloworld.people
CREATE TABLE IF NOT EXISTS `people` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `FirstName` varchar(50) DEFAULT '0',
  `LastName` varchar(50) DEFAULT '0',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;

-- Dumping data for table blazorhelloworld.people: ~3 rows (approximately)
/*!40000 ALTER TABLE `people` DISABLE KEYS */;
INSERT INTO `people` (`Id`, `FirstName`, `LastName`) VALUES
    (1, 'Tim', 'Corey'),
    (2, 'Jane', 'Smith'),
    (3, 'Sam', 'Storm');
/*!40000 ALTER TABLE `people` ENABLE KEYS */;

/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
/*!40014 SET FOREIGN_KEY_CHECKS=IFNULL(@OLD_FOREIGN_KEY_CHECKS, 1) */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40111 SET SQL_NOTES=IFNULL(@OLD_SQL_NOTES, 1) */;

测试MySQL连接的核心代码如下:

using a1.Shared;
using Microsoft.AspNetCore.Mvc;
using a1.Shared.Models;
using DataLibrary;
using Microsoft.Extensions.Configuration;
using System.Xml.Linq;
using System.Collections.Generic;


namespace a1.Server.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class PeopleController : ControllerBase
    {
        private static readonly string[] Summaries = new[]
        {
        "test", "test", "test", "test", "test", "test", "test", "test", "test", "test"
        };

        private readonly ILogger<PeopleController> _logger;

        public PeopleController(ILogger<PeopleController> logger)
        {
            _logger = logger;
        }

        private async Task<List<PersonModel>> getAllPeople() {

            List<PersonModel> people;
            DataAccess data = new DataAccess();

            string sql = "select * from people";
            Console.WriteLine(sql);
            people = await data.LoadData<a1.Shared.Models.PersonModel, dynamic>(sql, new { }, "Server=localhost;Port=3306;database=blazorhelloworld;user id=root;password=Abcd1234");

            return people;

        }


        [HttpGet]
        public async IAsyncEnumerable<PersonModel> Get()
        {
            List <PersonModel> people = await getAllPeople();

            Console.WriteLine(string.Join("\t", people));
            yield return null;
        }
    }
}

尝试访问https://localhost:7146/fetchpeople时,控制台无任何输出,请求协助排查问题。


排查要点

  • 路由不匹配:控制器使用[Route("[controller]")],正确的API路径应为https://localhost:7146/people,当前访问的/fetchpeople未匹配到PeopleController的Get方法,代码根本没执行。
  • 返回值错误:Get方法最后yield return null;,即使查询成功也仅返回null,应遍历列表返回数据:
    foreach(var person in people)
    {
        yield return person;
    }
    
  • 数据库连接验证:
    • 单独测试硬编码的连接字符串,确认账号、密码、端口、数据库名称无误。
    • 检查DataAccess.LoadData方法是否正确实现MySQL数据读取,是否引用了MySqlConnector等驱动,异步逻辑是否正确。
  • 异常捕获与日志:在getAllPeople中添加异常捕获,输出错误信息定位问题:
    private async Task<List<PersonModel>> getAllPeople() 
    {
        try
        {
            List<PersonModel> people;
            DataAccess data = new DataAccess();
    
            string sql = "select * from people";
            Console.WriteLine(sql);
            people = await data.LoadData<a1.Shared.Models.PersonModel, dynamic>(sql, new { }, "Server=localhost;Port=3306;database=blazorhelloworld;user id=root;password=Abcd1234");
            Console.WriteLine($"查询到{people.Count}条数据");
            return people;
        }
        catch(Exception ex)
        {
            Console.WriteLine($"数据库操作异常:{ex.Message}");
            throw;
        }
    }
    
  • 控制台输出位置:服务端日志输出在后端项目运行窗口,而非浏览器开发者工具控制台,确认查看位置正确。

内容的提问来源于stack exchange,提问作者hkguile

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 16:55:23