我正在撰寫一個簡單的 API,其中包括一個 POST 方法,用于將新記錄插入到幾個資料庫表中。資料來自表單資料。
其中一項是包含幾個欄位的集合。
我正在使用 Swagger 進行測驗,當我發布表單資料時,收集欄位為空白。
控制器 - 發布端點
[HttpPost("addboardmember")]
public IActionResult PostBoardMember([FromForm] MemberForm memberData)
{
try
{
_memberRepository.PostBoardMember(memberData);
var newMember = _memberRepository.GetMembers().SingleOrDefault(m => m.SSN == memberData.SSN);
var newMemberId = newMember.Member_ID;
var boardArray = memberData.BoardForms;
return Ok();
//return Ok() is temporary, will return 201 with appropriate data
}
catch (Exception ex)
{
return BadRequest("Couldn't Save record??" ex.InnerException.ToString());
}
}
MemberForm 類(縮寫以突出主要欄位和我正在努力填充的欄位:BoardForms
public class MemberForm
{
[Required, NotNull]
public string LastName { get; set; }
[Required, NotNull]
public string FirstName { get; set; }
[Required, NotNull]
public string SSN {get; set;}
public virtual ICollection<BoardForm> BoardForms { get; set; }
}
}
BoardForm 類:
public class BoardForm
{
public int Board_ID { get; set; }
public int StartYear { get; set; }
public int EndYear { get; set; }
}
當我使用 Swagger 測驗 Post API 端點時,BoardForms 欄位的計數為零。

大搖大擺的輸入。

我將有額外的業務邏輯來創建基于 BoardForm 陣列中的每條記錄的記錄。
我不知道我應該如何訪問設定為 ICollection 的表單資料中發送的陣列。
瀏覽器開發者工具有效載荷:

All the elements shown above in the payload screenshot are mapped to their correct elements an I can see the values with the exception of the 'BoardForms' array.
uj5u.com熱心網友回復:
- 您使用了錯誤的屬性,并且您的請求格式不正確。
[FromForm]當您希望 ASP.NET 系結以或<form>發布的 HTML 資料時使用。application/x-www-form-urlencodedmultipart/form-data- 您不能
[FromForm]用于 JSON 資料。
- 您不能
- 用于
[FromBody]讓 ASP.NET 使用一些已配置Content-Type的特定系結器來填充物件。- ASP.NET Core
application/json默認支持,我不知道還支持哪些其他型別(例如 XMLDataContract等),但它是可擴展的,例如您還可以支持 gRPC。 - 您可能不應該對任何“Web API”使用任何
<form>內容型別 (multipart/form-data和application/x-www-form-urlencoded),因為它們特定于 HTML 的特性<form>并且不適合描述結構化資料(例如任意資料串列或鍵控集合),而 ASP .NET確實支持系結<form>/FormData到不適合 JSON 檔案的物件。- 如果您使用
multipart/form-data允許從客戶端庫和無頭客戶端(而不是人工操作的網路瀏覽器)上傳二進制檔案,那么我建議您重新設計您的網路服務以接受二進制檔案上傳作為單獨的PUT/POST請求并不要在同一個請求中將 DTO 與二進制資料結合起來。- 雖然 ASP.NET Core可以將
application/json物件系結到 JSON (認為這是值得的努力。YMMV。IFormFilemultipart/form-data
- 雖然 ASP.NET Core可以將
- 如果您使用
- ASP.NET Core
所以改變這個:
[HttpPost("addboardmember")]
public IActionResult PostBoardMember([FromForm] MemberForm memberData)
{
}
對此:
[HttpPost("addboardmember")]
public IActionResult PostBoardMember([FromBody] MemberForm memberData)
{
}
你可能想確保你的Controller班級已經[ApiController]申請了它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/414073.html
標籤:
