2017-08-01 101 views
0

我嘗試使用Web API爲DataTables進行服務器端處理。有兩個動作在我的Web API控制器的參數相同的列表:使用POST方法將數據從DataTables發送到Web API控制器

public class CampaignController : ApiController 
{ 
    // GET request handler 
    public dtResponse Get(int draw, int start, int length) 
    { 
     // request handling 
    } 

    // POST request handler 
    public void Post(int draw, int start, int length) 
    { 
     // request handling 
    } 
} 

如果我使用GET方法發送AJAX請求到服務器時,Get動作被激活。但是,如果我使用POST方法,那麼這兩個操作都不會被激活。 我試圖改變POST處理程序簽名

public void Post([FromBody]object value) 
{ 
    // request handling 
} 

在這種情況下,valuenull。請注意,HttpContext.Current.Request.Form集合不是空的。此集合中存在draw,start,length變量。因此,我認爲麻煩在於模型綁定,但我無法修復它。請幫幫我。

+0

POST端點不適合多個參數。使用綁定對象。我看到你在下面的代碼片段中改變了它。使用具體類型:類圖,道具繪製,道具開始,道具長度。 –

+0

還添加了動詞屬性[HttpPost],[HttpGet]幫助設計/建立一個寧靜的API –

+0

@TezWingfield,我試圖添加動詞屬性,但沒有任何結果。 – Alexander

回答

1

不知道到底發生了什麼,但似乎有一些缺失的元素。我今天早上寫了一個Post endpoint,希望能幫助你朝正確的方向發展。

另外需要注意,如果你想「數據」使用Get,如果你插入的數據,然後POST

 [HttpPost] 
     [Route("orders")] 
     public async Task<IHttpActionResult> Post([FromBody]List<Models.Model.Order> orders) 
     { 

      if (orders == null) 
       return BadRequest("Unusable resources."); 

      if (validatedOrders.Count <= 0) 
       return BadRequest("Unusable resources."); 

      try 
      { 
       //Create abstracted Identity model to pass around layers 
       var identity = User.Identity as ClaimsIdentity; 

       var identityModel = IdentityModel.Create(identity); 
       if (identityModel == null) 
        return StatusCode(HttpStatusCode.Forbidden); 

       var response = await _orderService.AddAsync(validatedOrders, identityModel); 
       return Ok(response); 
      } 
      catch (System.Exception ex) 
      { 
       return InternalServerError(); 
      } 
      finally 
      { 
       _orderService.Dispose(); 
      } 
     } 
  • 利用IHttpActionResult將暴露的響應
  • 動詞屬性的迴歸與建築/設計幫助Restful API和 名稱簽名
  • 屬性路由保存寫入配置並更改路由 類

爲了總結這一切,與替換指令集:

public sealed class Diagram 
{ 
    public int Draw { get; set; } 
    public int Start { get; set; } 
    public int Length { get; set; } 
} 

重寫確認,刪除身份創建,刪除插入和刪除/替換路由屬性。

HttpContext.Current.Request.Form嘗試從此構建一個Diagram object並傳遞它。

或可替代的form collection

[HttpPost] 
[Route("something")] 
// POST api/<controller> 
public async Task<HttpResponseMessage> Post(FormDataCollection form) 
{ 
    string tid = form.Get("tid"); 
    string sid = form.Get("sid"); 
    string userid = form.Get("userid"); 
    string udid = form.Get("udid"); 

    } 

其他資源通過從數據表文件 Git Hub Repo

+0

空間類'Diagram'和[FromBody]屬性一起幫助!非常感謝你!!! – Alexander

+0

@亞歷山大最受歡迎!快樂編碼! –

1

這個怎麼樣:

[HttpPost]  
public void Post([FromBody]int draw, [FromBody]int start, [FromBody]int length) 
{ 
    // request handling 
} 
+0

''[FromForm]'屬性會導致編譯錯誤。只有[FromBody]和[FromUri]正在工作。什麼是'[FromForm]'屬性的命名空間? – Alexander

+0

[FromForm]是Dot Net的核心。如果你使用的是舊的.NET [FromBody]應該可以工作(更新的答案) – trigras

+0

謝謝,但[FromBody]不能解決問題。 – Alexander

相關問題