ASP.NET MVC Model Binding 會取 query string 還是 post body
這裡果然開始長草了 ......
趕快來發點廢文
前陣子在和前端同事討論前後端 API 參數傳遞,被問了一個問題:
參數要組在 Url 上,還是放在 request body?如果混用會有什麼結果?
這裡做一個很簡單的實驗:
準備一個 mvc action:/Home/Test
參數宣告一個 TestModel 來接
觀察 mvc 內建的 model binding 機制怎麼幫我們塞資料 並直接把物件 to Json 回傳
用 PostMan 發出請求,同時包含了:
url 上的 Name=Peter、Age=55 request body 的 Id=86888、Gender=Male、Age=6
噹噹~答案是
- 內建的 binding 機制會嘗試幫我們從兩個地方同時取出參數
- 如果有重複的參數,會以 body 中的優先
另外上述的是 ASP.NET MVC 專案
如果是 Web API 專案則有 [FromUri]、[FromBody] 等 attribute 可指定 binding 方式
黑暗執行緒黑大這篇,則提到 ASP .NET Core 擴充了更多種的 attribute 可使用
MS Doc 的說明文件 (for .NET Core 3.0) 繫結來源參數推斷
留言區
https://blog.miniasp.com/post/2015/11/08/ASPNET-MVC-Developer-Note-Part-25-Value-Provider-and-Model-Binder 原來 Will 保哥早就寫過一篇,詳細地說明 Model Binding 時預設的幾種 ValueProvider 跟順序。 相較之下,我在那邊瞎猜的層次差太多了😅
Soon (作者)