将 [FromQuery] 与复杂对象一起使用

Posted

技术标签:

【中文标题】将 [FromQuery] 与复杂对象一起使用【英文标题】:Using [FromQuery] with a complex object 【发布时间】:2021-02-23 21:28:45 【问题描述】:

我在传递查询字符串时向我的 API 端点发送请求时遇到参数未绑定的问题,如果我展平提交,则参数绑定,但这不是我想要的解决方案。我无法提供在第三方控件处理请求时发送请求的客户端代码。

我提供了一个与请求一起发送的查询字符串示例,可以在开发人员工具中看到,但是,Person 和 Property 返回为 null。有没有人有任何建议,特别是我可以做的服务器端更改来绑定这个复杂的对象?谢谢。

public class Submission 
    public Person Person get; set; 
    public Property Property  get; set; 


public class Person 
   public int Age  get; set; 


public class Property 
   public string Address  get; set; 


Query string parameters

'Person[Age]': 18
'Property[Address]': test

 [HttpGet("action")]
 public async Task<IActionResult> Submit([FromQuery] Submission model)
 

 

【问题讨论】:

在查询字符串中尝试Person.Age 【参考方案1】:

在这种情况下,您要调用的 URL 是:

https://localhost:.../.../action?Person.Age=18&Property.Address=test

【讨论】:

【参考方案2】:

改变你的行动:

[HttpGet("Submit")]
 public async Task<IActionResult> Submit([FromQuery] Submission model)
 

 

为你的提交模型试试这个

public class Submission 
    public int Age 
    
       set 
           if (Person=null Person= new Person();
           Person.Age=value;
          

    public string Address ... code like above;
    public Person Person get; set; 
    public Property Property  get; set; 


or you can create

public class SubmissionModel:Submission

public int Age 
      
       set 
           if (Person=null) Person= new Person();
           Person.Age=value;
          


in this case you action will be
[HttpGet("Submit")]
 public async Task<IActionResult> Submit([FromQuery] SubmissionModel subModel)
 
         var model = subModel as Submission;
           ...............
 

在这种情况下,您必须调用此 URL:

https://localhost:.../.../submit?Age=18&Address=myaddress

【讨论】:

如原帖中所述,展平对象确实有效,但是,我的示例是简化版本,我不希望展平我的多嵌套类。不过感谢您的建议!

以上是关于将 [FromQuery] 与复杂对象一起使用的主要内容,如果未能解决你的问题,请参考以下文章

与复杂的 .Net 通用对象(例如嵌套的 List<...> 等)一起使用的 ORM?

如何将伪类 nth-of-type 与复杂选择器一起使用? [复制]

如何将 MVVM 与 EF 一起使用(在 SQLite 中使用非常复杂的数据库)?

如何将 QVector 与多个对象一起使用

使用复杂的 sqlquery 时如何使用 Hibernate 创建组合对象的映射?

对于庞大而复杂的对象图,使用自跟踪实体是不是有效?