ASP.NET MVC Model Binding 會取 query string 還是 post body

這裡果然開始長草了 ......

趕快來發點廢文


前陣子在和前端同事討論前後端 API 參數傳遞,被問了一個問題:

參數要組在 Url 上,還是放在 request body?如果混用會有什麼結果?

這裡做一個很簡單的實驗:

  1. 準備一個 mvc action:/Home/Test

    參數宣告一個 TestModel 來接

    觀察 mvc 內建的 model binding 機制怎麼幫我們塞資料 並直接把物件 to Json 回傳

    201911151140464.png

  2. 用 PostMan 發出請求,同時包含了:

    url 上的 Name=Peter、Age=55 request body 的 Id=86888、Gender=Male、Age=6

    201911151139593.png

噹噹~答案是

  1. 內建的 binding 機制會嘗試幫我們從兩個地方同時取出參數
  2. 如果有重複的參數,會以 body 中的優先

另外上述的是 ASP.NET MVC 專案

如果是 Web API 專案則有 [FromUri]、[FromBody] 等 attribute 可指定 binding 方式

黑暗執行緒黑大這篇,則提到 ASP .NET Core 擴充了更多種的 attribute 可使用

留言區

https://blog.miniasp.com/post/2015/11/08/ASPNET-MVC-Developer-Note-Part-25-Value-Provider-and-Model-Binder 原來 Will 保哥早就寫過一篇,詳細地說明 Model Binding 時預設的幾種 ValueProvider 跟順序。 相較之下,我在那邊瞎猜的層次差太多了😅

Soon (作者)

新增一則留言