2017-08-01 136 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

相关问题