我尝试使用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
}
在这种情况下,value
为null
。请注意,HttpContext.Current.Request.Form
集合不是空的。此集合中存在draw
,start
,length
个变量。因此,我认为麻烦在于模型绑定,但我无法修复它。请帮帮我。
答案 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();
}
}
要将其全部包装起来,请将订单集合替换为:
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
}