Action 有多个参数被指定或推断为从请求正文绑定。每个动作只能绑定一个参数
Posted
技术标签:
【中文标题】Action 有多个参数被指定或推断为从请求正文绑定。每个动作只能绑定一个参数【英文标题】:Action has more than one parameter that was specified or inferred as bound from request body. Only one parameter per action may be bound from body 【发布时间】:2021-09-01 05:33:29 【问题描述】:错误:动作有多个参数被指定或推断为从请求正文绑定。每个动作只能绑定一个参数 .netcore
当我用我的 .net 核心项目的 2 个参数编写一个新的 httpPost 方法并出现上述错误时。我该如何解决这个问题。
[HttpPost]
public async Task<IActionResult> Create([FromBody] UserBO userBO, [FromBody] SiteCode siteCode)
try
await _userService.CreateUserAsync(userBO, siteCode);
return Created(nameof(Get), userBO);
catch (Exception ex)
return HandleException(ex);
【问题讨论】:
嗯,错误信息很清楚——基本上你只能使用[FromBody]
和一个参数。目前尚不清楚您期望它如何工作 - 当然主体是要么 UserBO
或 SiteCode
,但它不能同时是两者。在这种情况下,身体是什么样的?也许您需要一个新类型,它同时包含 UserBO
和 SiteCode
?
您可以在 POST 中添加多个 MIME 附件。请参阅:docs.microsoft.com/en-us/previous-versions/office/developer/…
当我创建用户时,将记录添加到另一个表(siteUSer 表)。所以我需要添加两个参数。我不知道应该放什么,这就是为什么我把 [frombody] 放在两者之前
您可以将SiteCode
作为路径的一部分传递吗?它似乎是一个必填字段。如果用户是在站点的上下文中创建的,那将是一种描述关系的 RESTful 方式。如果它们不是在站点的上下文中创建的,那么包装对象是理想的。
【参考方案1】:
您可以尝试创建一个包含 userBO 和 siteCode 的新模型:
型号:
public class USModel
public UserBO userBO get; set;
public SiteCode siteCode get; set;
行动:
[HttpPost]
public async Task<IActionResult> Create([FromBody] USModel uSModel)
try
await _userService.CreateUserAsync(uSModel.userBO, uSModel.siteCode);
return Created(nameof(Get), uSModel.userBO);
catch (Exception ex)
return HandleException(ex);
json格式:
"userBO":
...
,
"siteCode":
...
【讨论】:
以上是关于Action 有多个参数被指定或推断为从请求正文绑定。每个动作只能绑定一个参数的主要内容,如果未能解决你的问题,请参考以下文章