无法使用jQuery AJAX
问题描述:
无法使用jQuery AJAX无法使用jQuery AJAX
这里张贴与列表asp.net核心API复杂的对象张贴在asp.net核心API复杂的对象是模型
public class Bus
{
public int BusId { get; set; }
public string RegistrationNo { get; set; }
public IEnumerable<BusSeat> BusSeats { get; set; }
}
public class BusSeat : CoreModel
{
public int DecNumber { get; set; }
public int SeatId { get; set; }
}
这里控制器
[HttpPost]
public IActionResult Save([FromForm] Bus bus)
{
return Ok(bus);
}
这里是JavaScript
var d = {
BusId: 1,
RegistrationNo: 'REG123',
BusSeats: [
{
DecNumber: 1,
SeatId:2,
},
{
DecNumber: 1,
SeatId: 4,
}
]
}
$.ajax({
type: 'post',
url: 'http://localhost:46060/api/bus/save',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
data: JSON.stringify({ bus: d }),
success: function (data) {
},
error: function (data) {
}
});
请求成功,但我无法获得任何数据。我错过了什么?
答
更改从行动[FromBody],并在Ajax调用数据部分只是说
data: JSON.stringify(d)
不是
data: JSON.stringify({ bus: d })
答
你不需要stringify
,contentType
对阿贾克斯打电话,并且不需要在mvc动作上使用[FromForm]
。
只需将复杂对象直接传递给数据参数。
$.ajax({
type: 'post',
url: 'http://localhost:46060/api/bus/save',
dataType: 'json',
data: d,
success: function (response) {
},
error: function (response) {
}
});
只要复杂的json对象与您定义的视图模型匹配,绑定应该“神奇地”起作用。
[HttpPost]
public IActionResult Save(Bus bus)
{
return Ok(bus);
}
这是一个非主题,但你应该考虑如何构建你的uris,因为你正在构建web api。你不想在你的uri上继续使用旧的RPC
风格。
认为控制器名称是资源集合,并使用HttpMethod
作为动词。
所以我会创建BusesController
而不是BusController
,因为我考虑了资源收集,总线。
[Route("api/[controller]")]
public class BusesController : Controller
{
// GET api/buses
[HttpGet]
public IActionResult()
{
// Return all buses
return OK(...);
}
// GET api/buses/1
[HttpGet]
public IActionResult(int id)
{
// Return individual bus
return OK(...);
}
// POST api/buses
[HttpPost]
public IActionResult Post(CreateBusViewModel model)
{
// Create a new bus and return newly created uri of the bus
return Created(...);
}
}
您可以在这里阅读更多关于Richardson Maturity Model!
+0
感谢David,它正在工作 –
没有,没有工作 –
我改变了我的答案,并在当地项目中检查了它。一切都正确绑定。原因是AspNetCore模型绑定的工作原理。无论如何,它与传统的AspNet不同。 – Rob