【问题标题】:Web API POST object always nullWeb API POST 对象始终为空
【发布时间】:2019-03-06 22:21:07
【问题描述】:

我是 ASP.NET Web API 的新手,我正在尝试编写一个发送电子邮件的 API 方法。

这是我的 sendEmail 控制器:

[Route("sendemail")]
[HttpPost]
public bool SendEmail(EmailObj email)
{
    var To = email.sendTo;
    var Subject = email.subject;
    var Message = email.message;
    ...
}

但是,每当我使用邮递员对其进行测试时,发送的对象都是空的。 这就是我的 json 对象在 postman 中的构建方式:

{
    "subject": "Test Message",
    "message": "this is a test",
    "sendTo": "sam@test.com"
}

我确保该类型在邮递员上标记为 JSON,并尝试以不同的方式对其进行格式化,但它似乎不起作用。 API 接收电子邮件对象,但始终为空。

这是screenshot of my postman,以防我遗漏了什么。

感谢任何帮助。

编辑:已经尝试在 json 中添加“[FromBody]”和“email: {}”,但它不起作用。

【问题讨论】:

  • 你的控制器有路由吗
  • 你能分享一下路由配置吗??
  • 动作方法签名看起来不错。你的EmailObj 是什么样的?

标签: c# asp.net rest asp.net-web-api


【解决方案1】:

你可以做两件事:

public bool SendEmail([FromBody]EmailObj email)

或者把json对象的body改成:

{
    "email": {
        "subject": "Test Message",
        "message": "this is a test",
        "sendTo": "sam@test.com"
    }
}

【讨论】:

  • 已经尝试了这两个选项并且对象仍然为空
【解决方案2】:

我发现了错误,我将我的电子邮件对象声明为“可序列化”,这阻止了 json 对象获得任何值。

【讨论】:

  • 它在哪里被声明为可序列化的?
  • 很高兴你知道了。顺便说一句,EmailObj 类中的属性可以按照 C# 约定进行 PascalCased。绑定会正常工作。
  • 你应该用 Serializable 声明更新你的问题,否则你的问题是不完整的。
【解决方案3】:

You can compare your controller with below code and you can click this link and see the output.

[RoutePrefix("api/test")]
public class TestController : ApiController
{

   [Route("sendemail")]
   [HttpPost]
   public bool SendEmail(EmailObj email)
   {
       if(email !=null)
       {
           return true;
       }
       return false;
   }

}

public class EmailObj
{
    public string sendTo { get; set; }
    public string subject { get; set; }
    public string message { get; set; }
}

This is my postman image that how I have called the post api.

This is my WebApi.config file image.

【讨论】:

    猜你喜欢
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    • 2017-08-28
    • 1970-01-01
    相关资源
    最近更新 更多