Я просто хочу понять, я трачу дни, пытаясь решить проблему, из-за которой не работала операция POST (с использованием Web Api и Angular JS).Я думал обо всем, пытался, искал, я даже тысячу раз менял код.После этого я обнаружил, что POST
работает, когда формат JSON
был примерно таким:
{"Name":"Test","Age":23}
, но если я использовал JSON.stringify(options.models);
операция POST не работала, ее форматбыло так:
[{"Name":"Test","Age":23}]
Я не понимаю, в чем разница между ними (независимо от скобок []
)
Почему первый работал, а второй - нет?
Есть ли способ заставить работать второй формат?
Является ли второй массив массивом JSON?
Разве JSON.stringify(options.models)
не должен возвращать формат JSON?
Класс:
public class EmployeesData
{
public EmployeesData() { }
public EmployeesData(int Id, string Name, int Age, int Phone,string Job, string Department)
{ this.ID = Id;
this.Name = Name;
this.Age = Age;
this.Phone = Phone;
this.Job = Job;
this.Department = Department;}
[Required]
public int ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
В WebApi:
[HttpPost]
[ResponseType(typeof(EmployeesData))]
public async Task<IHttpActionResult> Post([FromBody]EmployeesData employeesData)
{
if (!ModelState.IsValid) {
return BadRequest(ModelState);}
db.Employees.Add(employeesData);
await db.SaveChangesAsync();
return CreatedAtRoute("DefaultApi", new { id = employeesData.ID }, employeesData);
}
В Angularjs:
parameterMap: function(options, operation) {
if (operation !== "read") {
console.log(kendo.stringify(options));
console.log(JSON.stringify(options.models)); // Not work because of []
var R = JSON.stringify(options.models).replace(/]|[[]/g, ''); // work I removed []
console.log(operation + R);
return (R);
}
}
}