WebApi NET Core 不接收请求 json,而它在 NET 标准中接收

Posted

技术标签:

【中文标题】WebApi NET Core 不接收请求 json,而它在 NET 标准中接收【英文标题】:WebApi NET Core not receiving request json, whereas it does in NET standard 【发布时间】:2021-08-27 03:14:55 【问题描述】:

我创建了一个 NET Core 入门 WebApi 项目并添加了一个非常简单的方法/对象。使用 Fiddler 测试端点,请求正文不会绑定到 post 参数。我花了 2 个小时寻找解决方案无济于事。为简洁起见,我将我的对象包含在控制器中。

namespace CoreWebApi.Controllers

    using Microsoft.AspNetCore.Mvc;

    [Route("[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    
        [HttpPost]
        public Message Post([FromBody]Message message)
        
            return message;
        
    

    public class Message
    
        public string Application;

        public string StatusOverride;
    

经过一番摸索后,我创建了一个 NET Standard web api 启动项目,复制/粘贴我的方法和对象,并且第一次工作!想知道是否有人可以告诉我我需要在我的 NET 核心 webapi 上做什么才能使其正常工作。

using System.Web.Http;

namespace WebApplication9.Controllers

    public class ValuesController : ApiController
    
        public Message Post([FromBody]Message message)
        
            return message;
        
    

    public class Message
    
        public string Application;

        public string StatusOverride;
    

【问题讨论】:

如果你继承自ApiController而不是ControllerBase会发生什么 ***.com/questions/38667445/… No more need to define [FromBody], [FromRoute], ... attributes explicitly 工作中的 .NET Standard 部分无关紧要...您确定与生成的内容相比,您没有在 Startup.cs 中进行任何更改吗?同时将 using 放在文件顶部...如果它不起作用 - 将项目发布到 GitHub ApiController 在 System.Web 命名空间中 (***.com/questions/40912473/…) @AndrewE - Microsoft 从ControllerBase 生成继承。你为什么建议改变它?! 【参考方案1】:

即使类成员是公共的,他们仍然需要拥有 get/set 访问器:

public class Message

    public string Application  get; set; 
    public string StatusOverride  get; set; 

...它的工作原理!

【讨论】:

完美。我认为这是我唯一没有尝试过的事情! :) 感谢您的观看。

以上是关于WebApi NET Core 不接收请求 json,而它在 NET 标准中接收的主要内容,如果未能解决你的问题,请参考以下文章

.net core 杂记:WebAPI的XML请求和响应

.net core WebAPI+EF 动态接收前台json,并动态修改数据库

.Net Core WebAPI 利用 IActionFilter 实现请求缓存

.Net Core WebAPI 利用 IActionFilter 实现请求缓存

.Net Core WebAPI 利用 IActionFilter 实现请求缓存

如何在 .NET Core WebAPI 中自动记录每个请求?