后台经过Visual Studio生成ASP.NET Core API项目以后,在Controller里添加以下代码前端
// POST: api/Todo [HttpPost] public async Task<ActionResult<TodoItem>> PostTodoItem(TodoItem todoItem) { _context.TodoItems.Add(todoItem); await _context.SaveChangesAsync(); return CreatedAtAction("GetTodoItem", new { id = todoItem.Id }, todoItem); }
如图所示,name的值为walk dog,后台api获取结果如第三张图所示:
jquery
如图所示,前端会将页面填写的值进行序列化,可是后端依然获取不到值:
ajax
不管是postMan调用仍是ajax调用,后台都获取不到name值和isComplete的值
json
测试以下:发现能够获取到相应的值,可是若是每一个Post方法并含有类型参数的请求前面都添加这么一个属性,相比之前的Asp.Net Api 操做有点不习惯,甚至多余
后端
增长一个Contrller,命名为BaseController, 并继承Controller ,代码以下所示:api
public class BaseController: Controller { }
而后在BaseController类上增长属性[ApiController],最终以下图所示:
app
最后修改全部API控制器的父类,改成继承BaseController
async
如图所示,此时能够看到已经没有[FromBody]了,须要注意一点是请求的ContentType必须为:application/json
post
若是没有该[ApiController]属性,则须要显式定义绑定源属性。若是没有[ApiController]或其余绑定源属性[FromQuery],ASP.NET Core运行时会尝试使用复杂的对象模型绑定器。复杂对象模型绑定器从值提供程序(具备已定义的顺序)中提取数据。例如,'body model binder'老是选择加入。测试