jquery FromBody似乎不适用于C# API PUT调用,并且始终为null

up9lanfz  于 5个月前  发布在  jQuery
关注(0)|答案(2)|浏览(64)

我似乎在这个问题上兜圈子,从我的搜索中,我似乎只能找到更“复杂”问题的解决方案。
我想把一个int和一个JSON字符串数组传递给API,然后处理它们。但是,它说字符串的格式不正确。所以我试着把它简化为只处理一个简单的字符串,但是它只是返回null。id被很好地拾取,如果我把返回改为id,它就会传递回去,但是对于items,它总是说它是null。
查看请求,有效负载看起来很好。

标题

负载

响应

浏览

JavaScript(JQuery)

function saveHealthCheck() {
    var cID = $('#<%= hfHealthCheck.ClientID %>').val();

    var jsonstr = '"Hello World!"'

    $.ajax({
        url: '<%= ResolveUrl("~/api/AppliesTo/") %>' + cID,
        dataType: 'application/json',
        data: jsonstr,
        type: 'PUT',
        success: function (data) {
            alert(data);
        }
     });
}

字符串
C# API

public string Put(int id, [FromBody] string items)
{
    //Just to test
    return items;
}

42fyovps

42fyovps1#

你不能通过POST或PUT把字符串作为对象传递。你的选择是把它 Package 成一个数据对象。
例如,更新的JS脚本:

function saveHealthCheck() {
    var cID = $('#<%= hfHealthCheck.ClientID %>').val();

    var jsonstr = {items:["Hello World!","Hello World2!"]};

    $.ajax({
        url: '<%= ResolveUrl("~/api/AppliesTo/") %>' + cID,
        dataType: 'application/json',
        data: JSON.stringify(jsonstr),
        type: 'PUT',
        success: function (data) {
            alert(data);
        }
     });
}

字符串
数据模型类:

public class MyItems
{
  public List<string> Items {get;set;}
}


更新API:

public List<string> Put(int id, [FromBody] MyItems items)
{
    //Just to test
    return items.Items;
}

vof42yt1

vof42yt12#

我不知道为什么这与其他人的建议不同,但这是有效的。

JavaScript

function saveHealthCheck() {
    var cID = $('#<%= hfHealthCheck.ClientID %>').val();
    var jsonstr = { "id": cID, "apps": ["Hello World!", "Hello World2!"] };

    $.ajax({
        url: '<%= ResolveUrl("~/api/AppliesTo/") %>',
        dataType: 'application/json',
        data: jsonstr,
        type: 'PUT',
        success: function (data) {
            alert(data);
        }
     });
}

字符串

API

public List<string> Put([FromBody] MyItems items)
        {
            return items.apps;
        }

型号

public class MyItems
    {
        public int id { get; set; }
        public List<string> apps { get; set; }
    }


感谢您在解决这个问题上的投入。

相关问题