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

up9lanfz  于 2024-01-07  发布在  jQuery
关注(0)|答案(2)|浏览(155)

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

标题

负载

响应

浏览

JavaScript(JQuery)

  1. function saveHealthCheck() {
  2. var cID = $('#<%= hfHealthCheck.ClientID %>').val();
  3. var jsonstr = '"Hello World!"'
  4. $.ajax({
  5. url: '<%= ResolveUrl("~/api/AppliesTo/") %>' + cID,
  6. dataType: 'application/json',
  7. data: jsonstr,
  8. type: 'PUT',
  9. success: function (data) {
  10. alert(data);
  11. }
  12. });
  13. }

字符串
C# API

  1. public string Put(int id, [FromBody] string items)
  2. {
  3. //Just to test
  4. return items;
  5. }

42fyovps

42fyovps1#

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

  1. function saveHealthCheck() {
  2. var cID = $('#<%= hfHealthCheck.ClientID %>').val();
  3. var jsonstr = {items:["Hello World!","Hello World2!"]};
  4. $.ajax({
  5. url: '<%= ResolveUrl("~/api/AppliesTo/") %>' + cID,
  6. dataType: 'application/json',
  7. data: JSON.stringify(jsonstr),
  8. type: 'PUT',
  9. success: function (data) {
  10. alert(data);
  11. }
  12. });
  13. }

字符串
数据模型类:

  1. public class MyItems
  2. {
  3. public List<string> Items {get;set;}
  4. }


更新API:

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

展开查看全部
vof42yt1

vof42yt12#

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

JavaScript

  1. function saveHealthCheck() {
  2. var cID = $('#<%= hfHealthCheck.ClientID %>').val();
  3. var jsonstr = { "id": cID, "apps": ["Hello World!", "Hello World2!"] };
  4. $.ajax({
  5. url: '<%= ResolveUrl("~/api/AppliesTo/") %>',
  6. dataType: 'application/json',
  7. data: jsonstr,
  8. type: 'PUT',
  9. success: function (data) {
  10. alert(data);
  11. }
  12. });
  13. }

字符串

API

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

型号

  1. public class MyItems
  2. {
  3. public int id { get; set; }
  4. public List<string> apps { get; set; }
  5. }


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

展开查看全部

相关问题