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,但它不能同时是两者。在这种情况下,身体是什么样的?也许您需要一个新类型,它同时包含 UserBOSiteCode 您可以在 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 有多个参数被指定或推断为从请求正文绑定。每个动作只能绑定一个参数的主要内容,如果未能解决你的问题,请参考以下文章

WCF 奇怪的行为

ASP.NET Core 最小 API - 无法推断一个或多个参数

TypeScript类型检查机制

(二十一)Struts2 数据标签

HTTP 请求,正文 vs 参数 vs 标头 vs 数据

Api Gateway 是不是允许没有请求正文的发布请求