有没有办法从 ASP.NET 8 中的查询字符串获取复杂对象?

问题描述 投票:0回答:1

我试图从查询字符串中获取一个复杂的对象,对象有一些基本类型和2个用于过滤和排序的类数组,但是当我从查询字符串中获取对象时,这2个数组是空的。

我试图向 Chat-GPT 询问此事,用谷歌搜索这个问题,但没有找到任何可以帮助我的东西。这是我的Dto

public record GetItemsSortedDto(
    int ParentId,
    SortingFieldDto[]? SortFields,
    Filter[]? Filters,
    int Page = 1,
    int PageSize = 10,
    string OrderColumn = "Number",
    bool IsSortedAsc = true)
    : IStandartForTypesOfConstructionDto;

public class SortingFieldDto
{
    public string Field { get; set; } = "Number";
    public object RangeStart { get; set; } = null!;
    public object RangeEnd { get; set; } = null!;
}

public class Filter
{
    public string Id { get; set; } = "TypeOfConstruction";
    [FromQuery(Name = "Value")]
    public string[] Values { get; set; } = null!;
}

这是我的控制器方法

  [HttpGet("ItemsSorted")]
  [ProducesResponseType(StatusCodes.Status200OK)]
  public async Task<ActionResult> GetItemsSorted([FromQuery] GetItemsSortedDto getDto)
  {
      var query = _mapper.Map<GetItemsByParentSortedQuery>(getDto);

      var result = await Mediator.Send(query);
      return Ok(query);
  }  

我尝试使用ModelBinding,但没有成功。在 dto 中,我需要存储排序和过滤数组,因此我可以同时排序和过滤多于 1 列。

c# asp.net asp.net-core get query-string
1个回答
0
投票

来自 Microsoft 模型绑定文档 (https://learn.microsoft.com/en-us/aspnet/core/mvc/models/model-binding?view=aspnetcore-8.0#complex-types)

“复杂类型必须具有公共默认构造函数和要绑定的公共可写属性”。

您的 Dto 类使用新的构造函数模型(这应该不是问题),但它只有字段而没有属性。

我会尝试将字段重构为实际属性。

© www.soinside.com 2019 - 2024. All rights reserved.