.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
相关产品推荐
相关产品推荐

