我正在尝试从表单捕获用户响应我的响应模型如下所示:
{
public int UserId { get; set; }
public int QId { get; set; }
public int OptionId { get; set; }
public string Response { get; set; }
public SurveyCreatorOptions SurveyCreatorOptions { get; set; }
public SurveyUserMasters User { get; set; }
}
以上模型和DbContext是在使用efcore数据库优先方法搭建现有数据库的基础上创建的。
控制器中的POST方法看起来像这样:
// POST: api/SurveyUserResponses
[HttpPost]
public async Task<IActionResult> PostSurveyUserResponse([FromBody] SurveyUserResponse surveyUserResponse)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
_context.SurveyUserResponse.Add(surveyUserResponse);
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateException)
{
if (SurveyUserResponseExists(surveyUserResponse.UserId))
{
return new StatusCodeResult(StatusCodes.Status409Conflict);
}
else
{
throw;
}
}
return CreatedAtAction("GetSurveyUserResponse", new { id = surveyUserResponse.UserId }, surveyUserResponse);
}
在我的控制器中使用此方法,我可以按照以下格式发送发帖请求:
{
"userId": 1,
"qId": 2,
"optionId": 1,
"response": "Male",
"surveyCreatorOptions": null,
"user": null
}
上述方法将仅捕获表单的一个字段,但是我的表单包含多个字段。所以我想发送这种格式的JSON
[
{
"userId": 1,
"qId": 1,
"optionId": 1,
"response": "XYZ",
"surveyCreatorOptions": null,
"user": null
},
{
"userId": 1,
"qId": 2,
"optionId": 1,
"response": "Male",
"surveyCreatorOptions": null,
"user": null
},
{
"userId": 1,
"qId": 3,
"optionId": 4,
"response": "Samsung",
"surveyCreatorOptions": null,
"user": null
}
]
我是.NET的新手,我对如何编写POST方法以及将上述列表的每个元素绑定到我的数据库感到困惑。我已经制作了Ajax post方法,可以发送上述格式的json,所以这不是问题
上述方法将仅捕获表单的一个字段,但我的表单包含多个字段
内置的ModeBinders会注意,如果您更改操作以适应List<>
:
公共异步任务公共异步任务PostSurveyUserResponse([FromBody] SurveyUserResponse surveyUserResponse) PostSurveyUserResponse([FromBody]列表 surveyUserResponses){....}