Я установил таблицу DataTables в своем интерфейсе для обработки на стороне сервера, поскольку это большой набор данных. Я настроил Ajax-вызов, как показано ниже, чтобы отправить сообщение на контроллер MVC в том же приложении.
Ajax call:
ajax: {
url: '/test',
type: 'POST',
contentType: 'application/json',
dataType: 'json',
data: function (d) {
return JSON.stringify(d);
}
}
Контроллер:
[Route("[controller]")]
[AllowAnonymous]
public class TestController : Controller
{
[HttpPost]
public IActionResult Post([FromBody]DataTablesRequest request)
{
// Content removed for brevity
return Ok();
}
}
По какой-то причине я всегда получаю обратно 400 ошибок, а действие контроллера никогда не срабатывает. Я подумал, что это может быть связано с тем, что я также реализовал .NET Identity, поэтому, возможно, это была проблема с авторизацией, но добавление атрибута [AllowAnonymous]
не помогло, и я также попытался добавить xhrFields: { withCredentials: true }
к вызову Ajax, который без разницы.
Кстати, модель DataTablesRequest
выглядит так:
public class DataTablesRequest
{
public int Draw { get; set; }
public int Start { get; set; }
public int Length { get; set; }
public DataTablesOrder[] Order { get; set; }
public DataTablesColumn[] Columns { get; set; }
public DataTablesSearch Search { get; set; }
}
public class DataTablesOrder
{
public int Column { get; set; }
public string Dir { get; set; }
}
public class DataTablesColumn
{
public string Data { get; set; }
public string Name { get; set; }
public bool Searchable { get; set; }
public bool Orderable { get; set; }
public DataTablesSearch Search { get; set; }
}
public class DataTablesSearch
{
public string Value { get; set; }
public bool Regex { get; set; }
}
... и вот пример JSON, который отправляется в теле:
{
"draw":1,
"columns":[
{
"data":"col1",
"name":"",
"searchable":true,
"orderable":true,
"search":{
"value":"",
"regex":false
}
},
{
"data":"col2",
"name":"",
"searchable":true,
"orderable":true,
"search":{
"value":"",
"regex":false
}
},
{
"data":"col3",
"name":"",
"searchable":true,
"orderable":true,
"search":{
"value":"",
"regex":false
}
},
{
"data":"col4",
"name":"",
"searchable":true,
"orderable":true,
"search":{
"value":"",
"regex":false
}
}
],
"order":[
{
"column":1,
"dir":"desc"
}
],
"start":0,
"length":25,
"search":{
"value":"",
"regex":false
}
}
Обновление:
Похоже, это как-то связано с SSL. Я только что отправил запрос в Почтальон и проверил консоль Почтальона, которая показывает следующее: