【问题标题】:Empty body when posting data using fetch()使用 fetch() 发布数据时为空正文
【发布时间】:2021-01-15 10:00:30
【问题描述】:

这是我的控制器被调用,但值总是以 null 结束:

 public void Post([FromBody]string value) {
 }

它是这样称呼的:

function () {
    var data = {
        'sku': $('#radioProduct').val(),
        'qty': $('#productQty').val()
    }
    return fetch('/api/Default', {
         method: 'post',
         headers: {
              'content-type': 'application/json'
         },
         body: JSON.stringify(data)
         }).then(function (res) {
             return res.json();
         }).then(function (data) {
             return data.orderID; // Use the same key name for order ID on the client and server
         });
   }
});

我在这里做错了吗? API 确实被调用,但主体为空。

【问题讨论】:

  • 您的代码看起来不错。查看浏览器开发工具的网络面板,确定实际发送的内容,以便区分客户端和服务器端问题。

标签: javascript api asp.net-web-api


【解决方案1】:

这是null,因为您要发布以下 JSON:

{
    "sku": "sku's value",
    "qty": 1
}

但您的控制器需要string。事实上,您已将 application/json 指定为 Content-Type,您需要做的是创建一个类来模拟您期望接收的两个值:

public class ProductInfo
{
    public string Sku { get; set; }
    public int Qty { get; set; }
}

如果不这样做,模型绑定器将不知道如何将 skuqty 的值与任何内容相关联,因此您会得到 null

最后,将您的操作更改为:

public void Post([FromBody]ProductInfo productInfo)

模型绑定完全按照约定处理,这意味着将属性名称或原始值与您发送到控制器的 JSON 或其他数据相关联。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 2018-11-24
    • 2022-11-16
    相关资源
    最近更新 更多