使用POST方法将数据从DataTables发送到Web API控制器

时间:2017-08-01 09:19:53

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

我尝试使用Web API为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集合不是空的。此集合中存在drawstartlength个变量。因此,我认为麻烦在于模型绑定,但我无法修复它。请帮帮我。

2 个答案:

答案 0 :(得分: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");

  }

DataTable文档中的其他资源 Git Hub Repo

答案 1 :(得分:1)

这个怎么样:

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