Asp.net web api 无法使用jquery ajax在asp.net核心api中发布复杂对象
无法使用jquery ajax将具有列表的复杂对象发布到asp.net核心api 这是模型Asp.net web api 无法使用jquery ajax在asp.net核心api中发布复杂对象,asp.net-web-api,asp.net-core-2.0,Asp.net Web Api,Asp.net Core 2.0,无法使用jquery ajax将具有列表的复杂对象发布到asp.net核心api 这是模型 public class Bus { public int BusId { get; set; } public string RegistrationNo { get; set; } public IEnumerable<BusSeat> BusSeats { get; set; } } public c
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; }
}
下面是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) {
}
});
请求成功,但我无法获取任何数据。我遗漏了什么?将操作中的From部分更改为[FromBody],并在ajax调用中调用数据,只需说
data: JSON.stringify(d)
而不是
data: JSON.stringify({ bus: d })
将操作中的From部分更改为[FromBody],并在ajax调用中更改数据,只需说
data: JSON.stringify(d)
而不是
data: JSON.stringify({ bus: d })
在ajax调用中不需要
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);
}
这是离题的,但您应该考虑如何构造URI,因为您正在构建web api。您不希望在uri上仍然使用良好的旧RPC
样式
将控制器名称视为资源集合,并使用HttpMethod
作为动词
因此,我将创建busecontroller
而不是BusController
(或者使用[RoutePrefix(“api/bus”)]
),因为我将资源视为一个集合总线
[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(...);
}
}
你可以在这里了解更多 在ajax调用中不需要
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);
}
这是离题的,但您应该考虑如何构造URI,因为您正在构建web api。您不希望在uri上仍然使用良好的旧RPC
样式
将控制器名称视为资源集合,并使用HttpMethod
作为动词
因此,我将创建busecontroller
而不是BusController
(或者使用[RoutePrefix(“api/bus”)]
),因为我将资源视为一个集合总线
[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(...);
}
}
你可以在这里了解更多 我改变了答案,并在当地的一个项目中进行了检查。一切都绑定正确。原因是AspNetCore模型绑定是如何工作的。在任何情况下,它都不同于经典的AspNet。我更改了答案,并在本地项目中进行了检查。一切都绑定正确。原因是AspNetCore模型绑定是如何工作的。无论如何,它都不同于经典的AspNet。