【问题标题】:WebApi NET Core not receiving request json, whereas it does in NET standardWebApi NET Core 不接收请求 json,而它在 NET 标准中接收
【发布时间】: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会发生什么
  • stackoverflow.com/questions/38667445/… No more need to define [FromBody], [FromRoute], ... attributes explicitly
  • 工作中的 .NET Standard 部分无关紧要...您确定与生成的内容相比,您没有在 Startup.cs 中进行任何更改吗?同时将 using 放在文件顶部...如果它不起作用 - 将项目发布到 GitHub
  • ApiController 在 System.Web 命名空间中 (stackoverflow.com/questions/40912473/…)
  • @AndrewE - Microsoft 从ControllerBase 生成继承。你为什么建议改变它?!

标签: c# .net-core asp.net-web-api2 asp.net-core-webapi .net-standard


【解决方案1】:

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

public class Message
{
    public string Application { get; set; }
    public string StatusOverride { get; set; }
}

...它的工作原理!

【讨论】:

  • 完美。我认为这是我唯一没有尝试过的事情! :) 感谢您的观看。
猜你喜欢
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多