【问题标题】:Web API post data: object reference not set to an instance of an objectWeb API 发布数据:对象引用未设置为对象的实例
【发布时间】:2014-02-13 11:33:37
【问题描述】:

我正在尝试让 Web API 与 POST 一起使用,并且我的控制器中有以下内容:

public class mainGridController : ApiController
    {

        public class formData
        {
            public string module { get; set; }
            public string group { get; set; }
            public string staff { get; set; }
        }

        public HttpResponseMessage Post([FromBody] formData data)
        {
            string string_group = "";
            string string_staff = "";

            if (data.group != null)
            {

但我似乎在“if”语句中为 data.group 设置了“对象引用未设置为对象的实例”。

这是我的路线信息:

protected void Application_Start(object sender, EventArgs e)
        {
             GlobalConfiguration.Configuration.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{data}",
            defaults: new { module = System.Web.Http.RouteParameter.Optional, data = System.Web.Http.RouteParameter.Optional}
            );
        }

有人知道是什么原因造成的吗?我正在尝试使用 jQuery 发布。

这是我的 jQuery 代码:

var url = "api/mainGrid";
var source = {
    datatype: 'json',
    contentType: 'application/json; charset=utf-8',
    url: url,
    processData: false,
    type: "POST",
    id: "SEQUENCE",
    root: 'rowsinfo',
    cache: false,
    columns: [],
    datafields: [],
    beforeprocessing: function (data) {
        var columnsdata = new Array();
        var datafieldsdata = new Array();
        for (k in data.columnsinfo) {
            var col = {};
            col.text = data.columnsinfo[k]["DISPLAYNAME"];
            col.datafield = data.columnsinfo[k]["DISPLAYNAME"];
            var datafields = {};
            datafields.name = data.columnsinfo[k]["DISPLAYNAME"];
            columnsdata.push(col);
            datafieldsdata.push(datafields);
            source.columns = columnsdata;
            source.datafields = datafieldsdata;
        }
        $("#jqxgrid").jqxGrid({ columns: source.columns });
    },
    data: {
        group: JSON.stringify(checkedGroups),
        staff: JSON.stringify(checkedStaff),
        module: selectedModuleSEQ
    }
};

谢谢

【问题讨论】:

  • 发布你的jQuery代码,这很重要。仅供参考,使用 C# 时,recommended 使用 Pascal 大小写作为类名。
  • 谢谢詹姆斯,刚刚发布...我会更改班级名称谢谢!
  • checkedGroups 和 checkedStaff 都是 javascript 数组。

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


【解决方案1】:

问题是您已将 dataType 参数指定为 json 但您传递的是 JS 对象 - 这当然不是 JSON。

您需要将您的 data 对象转换为实际的 JSON 才能使其工作

data: JSON.stringify({
    group: JSON.stringify(checkedGroups),
    staff: JSON.stringify(checkedStaff),
    module: JSON.stringify(selectedModuleSEQ)
}),

【讨论】:

  • 非常感谢詹姆斯。仅供参考,我还必须将 [FromBody] 更改为 [FromUri]
  • @realtek 那么 JSON 是否发布在 URL 中?你可以试试data: { json: JSON.stringify({ ... }) }
  • 嗨詹姆斯,对不起,我以为是,但变量正在我的 If 语句中设置....它似乎仍然没有通过?
  • @realtek 所以你在我的回答中使用了这种方法并使用了[FromBody],它仍然是null?我唯一能看到的是属性,即group/staff/module 在服务器上是string,但它们似乎是客户端的模型。要么在每个单独的属性数据客户端调用JSON.stringify,要么更新您的服务器模型以期望每个模型而不是字符串。
  • 没错,我已经尝试过你的方法,但它仍然为空?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多