2014-02-13 2 views
0

Я пытаюсь получить Web API работы с POST и я следующий в моем контроллере:Web API сообщение данных: ссылка на объект не указывает на экземпляр объекта

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) 
      { 

Но я, кажется, получают «Ссылка на объект не установлена ​​в экземпляр объекта» для data.group в моем выражении «if».

Вот мой маршрут информация:

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 
    } 
}; 

Благодаря

+1

Сообщение кода JQuery, это очень важно. FYI при использовании C# [рекомендуется] (http://msdn.microsoft.com/en-us/library/vstudio/ms229043 (v = vs.100) .aspx), что вы используете оболочку Pascal для имен классов. – James

+1

Спасибо, Джеймс, только что написал ... Я изменю имя класса, спасибо! – realtek

+0

checkedGroups и checkedStaff - это как javascript массивы. – realtek

ответ

2

Проблема вы указали параметр dataType, как json но вы передаете JS объект - что, конечно, не в формате JSON ,

Вы должны преобразовать data объект фактической JSON для этой работы

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

Блестяще спасибо Джеймс. FYI Мне также пришлось изменить [FromBody] на [FromUri] – realtek

+0

@realtek, так как JSON отправляется в URL-адрес? Вы можете попробовать 'data: {json: JSON.stringify ({...})}' вместо этого. – James

+0

Привет, Джеймс, извините, я думал, что это было, но переменная была установлена ​​в моем утверждении If ... она все еще, похоже, не проходит? – realtek