2015-10-23 52 views
0

我有下面的類空:MVC的WebAPI +角交=每一個參數是在服務器側

public class SomeArg 
{ 
    public int name { get; set; } 
} 

POST請求發送該數據

var requestData = {}; 
requestData.items = [{ name: 1 }, { name: 2 }]; 
requestData.logic = "and"; 

$http.post('SomeAction/', 
      JSON.stringify(requestData), 
      { headers: { 'Content-Type': 'application/json' } } 
      ) 
      .success(function (data, status, headers, config) { 
      }). 
      error(function (data, status, headers, config) { 
      }); 

和的WebAPI控制器的動作

[HttPost] 
public HttpResponseMessage SomeAction(string logic = null, 
     [FromUri] 
     SomeArg[] items = null) { ... } 

我可以看到所有的參數都是空的。爲什麼?

回答

3

該API控制器POST方法應該是這樣的

[HttPost] 
public HttpResponseMessage SomeAction(string logic = null, 
     [FromBody]SomeArg[] items = null) { ... } 

和角呼叫不應該序列化對象。 Angular會做到這一點。

$http.post('SomeAction/', 
      requestData, 
      { headers: { 'Content-Type': 'application/json' } } 
      ) 
      .success(function (data, status, headers, config) { 
      }). 
      error(function (data, status, headers, config) { 
      }); 

更新:我複查項目傳遞給服務器,我想你應該創建一個封裝在POST傳遞諸如

public class ActionData { 
    public string logic {get;set;} 
    public SomeArg[] items {get;set;} 
} 

的數據,並以此作爲在服務器上的單個對象一個參數到你的Web API函數

public HttpResponseMessage SomeAction(ActionData data) { ... }

請閱讀如何parame ter結合在webapi的作品http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api

+0

嗯,仍然值爲空 – Tony

+0

現在它的作品,謝謝! – Tony