.NET 8 Web API代码执行成功但触发内部序列化错误的问题求助
.NET 8 Web API代码执行成功但触发内部序列化错误的问题求助
嘿,兄弟,我一眼就瞅出你代码里的问题了——你把**旧版ASP.NET Web API(基于.NET Framework)**和ASP.NET Core 8的东西混在一起用啦!这就是导致内部序列化错误的根源。
问题出在哪?
- 你引用了
System.Web.Http命名空间,还继承了ApiController——这是旧框架的专属用法,ASP.NET Core 8完全不兼容这套API,底层序列化逻辑自然会乱套。 - 你用的
IHttpActionResult也是旧框架的返回类型,Core里早就换成了标准的IActionResult。
给你改好的可用代码:
using System.Text.Json.Serialization; // 替换成ASP.NET Core专属的Mvc命名空间 using Microsoft.AspNetCore.Mvc; [Route("api/[controller]")] // Core里写API用ControllerBase做基类(不带视图支持,更轻量) public class MyController : ControllerBase { [HttpGet] [Route("getdata")] // 改用Core标准的IActionResult返回类型 public IActionResult GetData(string param1, string param2) { if (string.IsNullOrEmpty(param1) || string.IsNullOrEmpty(param2)) { // Core里的BadRequest用法逻辑类似,但底层适配了Core的序列化机制 return BadRequest("Both param1 and param2 are required."); } // 正常业务逻辑的返回示例 return Ok("Data retrieved successfully"); } }
额外提醒:
如果需要自定义序列化规则,比如处理循环引用、日期格式这些,可以在Program.cs里通过以下方式配置:
var builder = WebApplication.CreateBuilder(args); // 添加控制器并配置Json序列化选项 builder.Services.AddControllers() .AddJsonOptions(options => { // 示例:忽略循环引用 options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles; // 示例: camelCase命名风格 options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; });
另外,确保你的项目是正经的ASP.NET Core 8 Web API项目——新建的时候别选错模板,要选“ASP.NET Core Web API”哦!
备注:内容来源于stack exchange,提问作者DooDoo
相关产品推荐
相关产品推荐

