後臺經過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'老是選擇加入。測試