【问题标题】:POST to WebAPI controller results in null parametersPOST 到 WebAPI 控制器导致空参数
【发布时间】:2013-09-17 04:59:03
【问题描述】:

我正在尝试将 JSON 字符串发布到接受复杂类型作为参数但所有参数属性始终为空的 WebAPI 控制器。根据下面的代码,任何想法为什么?请求正确地访问了 WebAPI 方法,并且参数不为空,但它的所有属性都是。

编辑:如果我删除对 JSON.stringify() 的调用,参数属性会正确填充,但我的请求正文现在是查询字符串而不是有效的 JSON 对象,这不会fly 因为我的实际对象还包含一些在作为查询字符串传递时不起作用的子集合。

型号

public class SavedViewData
{
    public int UserID { get; set; }
    public int? SavedID { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}

JSON 请求正文(从 Fiddler 复制)

{"UserID":"1","SavedID":null,"Name":"Test","Description":"Description"}

WebAPI 操作

[HttpPost]
public int Save(SavedViewData viewData)
{
    return 1;
}

jQuery $.ajax 调用

var view = {
    UserID: userID,
    SavedID: null,
    Name: 'Test',
    Description: 'Description'
};

$.ajax({
    type: "POST",
    url: '/api/save',
    data: JSON.stringify(view),
    contenttype: "application/json; charset=utf-8",
    success: function (data) {    
        alert('success');
    }
});

【问题讨论】:

  • 尝试将UserID 作为数字而不是字符串发送。
  • @Archer 你错了,内容类型是你要发送的,数据类型是你所期望的。
  • 很好地抓住了 UserID,但改变它对问题没有影响。
  • URL有效,可以在actionsave中使用断点吗?
  • 是的,URL 是有效的,我可以打断点。

标签: jquery asp.net json asp.net-web-api


【解决方案1】:

所以正如我所料,这很愚蠢:

contenttype: "application/json; charset=utf-8",

应该是

contentType: "application/json; charset=utf-8",

类型中的“T”没有大写……还有半天!

【讨论】:

  • 在使用 Fiddler 进行测试时,我经常被这个确切的问题所困扰 - 请记住将“Content-Type: application/json”添加到您的作曲家标题中!
猜你喜欢
  • 2018-11-24
  • 2018-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多