[C#] .Net6 關於 Web API 的二三事 – form 直接 POST 到 Web API

2022-10-03


最近都把專案升級成 .Net  6 ,沒啥大問題,只是最近想找個機會好好研究一下 Web API,想說遇到或是測試到就筆記一下,所以也不是啥教學文

如果有啥更好得做法,可以在跟我說,這邊沒有啥難度的技術,可能對很多高手來說就是喝水一樣的事情。


這次案例設計很簡單就是一個 <form> 我直接 POST 到 Web API (案例中為 TestController) 上面

介紹一下 <form> 的結構

出來長相大概長這樣,如果你看 code 無法想像的話


接下來就是 首先在 .Net 6 中,你得先在 Program.cs 加入 app.MapControllers();  這一步我常常忘記



Web API Code Sample2 :



這案例很簡單回傳就是 IActionResult ,其實回傳他預設就會是 ontent-type: application/json; charset=utf-8


回應結果


看一下回應的 headers


這裡面值得一提的就是,input 如果 type  是 number ,WebAPI 這邊是可以用 decimal 承接,如果是 input:checkbox 同一個 name ,則可以使用 string[]  接 (如文中的 hobby)

這其實非常方便,當然一般狀況通常都是在前端準備好物件(一個 自訂好結構的 json ) 在一次往後送,不過這是測試,我也非常偷懶的直接用 dynamic 接了就拋


再來測試 XML 輸出,因為輸出 dynamic 比較麻煩所以我建立了一個物件 User.cs


Web API Code Sample3 :



注意,需要再 Program.cs 中 var app = builder.Build();  之前加入 


當然 form 那邊的 action 也要改成  action="/api/test/sample3"


回應結果:


回應的 headers




注意: 如果你的 Web API 部分有些是允許 null 或是空值傳入 ,但是你傳入到 Web API 會出現 

{

   "type":"https://tools.ietf.org/html/rfc7231#section-6.5.1",

   "title":"One or more validation errors occurred.",

   "status":400,

   "traceId":"00-c483917b91ff3410d2305af939c2ac3e-60280f3f85d80a58-00",

   "errors":{

      "userId":[

         "The userId field is required."

      ]

   }


需要再 Program.cs 中 修改這一段


需要再 AddControllers 中加入  options.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes = true 


大概筆記到這裡,不算教學,算是給自己的筆記


當麻許的超技八 2014 | Donma Hsu Design.