C# 以JQuery样式传递的解析查询字符串筛选器/排序

C# 以JQuery样式传递的解析查询字符串筛选器/排序,c#,asp.net-web-api2,kendo-datasource,C#,Asp.net Web Api2,Kendo Datasource,有人知道C语言中的标准库或模型绑定器可以解析JQuery风格的序列化过滤器和排序,比如从Kendo数据源传递的过滤器和排序吗 因此,要将这样的查询字符串解析为具有筛选器和排序对象的强类型数组,请执行以下操作: sort[0][field]=status.name&sort[0][dir]=desc&filter[logic]=and&filter[filters][0][field]=status.name&filter[filters][0][operator]

有人知道C语言中的标准库或模型绑定器可以解析JQuery风格的序列化过滤器和排序,比如从Kendo数据源传递的过滤器和排序吗

因此,要将这样的查询字符串解析为具有筛选器和排序对象的强类型数组,请执行以下操作:

sort[0][field]=status.name&sort[0][dir]=desc&filter[logic]=and&filter[filters][0][field]=status.name&filter[filters][0][operator]=eq&filter[filters][0][value]=Sold
我尝试过搜索,但不幸的是,我似乎遇到了不完整的实现或JavaScript示例

更新:直到@Lali指出这是标准的身体形式序列化,我才意识到这种格式已经得到了标准的支持

我现在通过创建一些类并将其用作web API操作的参数来解决这个问题,它神奇地工作了:

public async Task<IHttpActionResult> Get([FromUri] ListSelectionOptionsWithFilter options)
{
   //query something
}

public class ListSelectionOptionsWithFilter
{
    public int? Skip { get; set; }
    public int? Take { get; set; }
    public List<ListSortOption> Sort { get; set; }
    public ListFilterOptions Filter { get; set; }
}

public class ListFilterOptions
{
    public string Logic { get; set; }
    public List<ListFilterOption> Filters { get; set; }
}

public class ListFilterOption
{
    public string Field { get; set; }
    public string Operator { get; set; }
    public string Value { get; set; }
}

public class ListSortOption
{
    public string Field { get; set; }
    public string Dir { get; set; }
}
public async Task<IHttpActionResult> Get([FromUri] ListSelectionOptionsWithFilter options)
{
   //query something
}

public class ListSelectionOptionsWithFilter
{
    public int? Skip { get; set; }
    public int? Take { get; set; }
    public List<ListSortOption> Sort { get; set; }
    public ListFilterOptions Filter { get; set; }
}

public class ListFilterOptions
{
    public string Logic { get; set; }
    public List<ListFilterOption> Filters { get; set; }
}

public class ListFilterOption
{
    public string Field { get; set; }
    public string Operator { get; set; }
    public string Value { get; set; }
}

public class ListSortOption
{
    public string Field { get; set; }
    public string Dir { get; set; }
}

直到@Lali指出这是标准的身体形式序列化,我才意识到这种格式已经得到了标准的支持

我现在通过创建一些类并将其用作web API操作的参数来解决这个问题,它神奇地工作了:

public async Task<IHttpActionResult> Get([FromUri] ListSelectionOptionsWithFilter options)
{
   //query something
}

public class ListSelectionOptionsWithFilter
{
    public int? Skip { get; set; }
    public int? Take { get; set; }
    public List<ListSortOption> Sort { get; set; }
    public ListFilterOptions Filter { get; set; }
}

public class ListFilterOptions
{
    public string Logic { get; set; }
    public List<ListFilterOption> Filters { get; set; }
}

public class ListFilterOption
{
    public string Field { get; set; }
    public string Operator { get; set; }
    public string Value { get; set; }
}

public class ListSortOption
{
    public string Field { get; set; }
    public string Dir { get; set; }
}
public async Task<IHttpActionResult> Get([FromUri] ListSelectionOptionsWithFilter options)
{
   //query something
}

public class ListSelectionOptionsWithFilter
{
    public int? Skip { get; set; }
    public int? Take { get; set; }
    public List<ListSortOption> Sort { get; set; }
    public ListFilterOptions Filter { get; set; }
}

public class ListFilterOptions
{
    public string Logic { get; set; }
    public List<ListFilterOption> Filters { get; set; }
}

public class ListFilterOption
{
    public string Field { get; set; }
    public string Operator { get; set; }
    public string Value { get; set; }
}

public class ListSortOption
{
    public string Field { get; set; }
    public string Dir { get; set; }
}

在请求体中传递此数据,而不是在查询字符串中发送。如果名称匹配,您可以在单个对象中拥有所有内容。“我说得对吗?”拉里我宁愿把它作为一个GET请求,那不应该有一具尸体,对吧?但是你确实给了我使用表单体解析器的想法,让我检查一下,谢谢!我通过解析请求并将所有参数放入一个对象中,并使该对象在继承BaseController的所有控制器中都可访问,从而实现“BaseController”。只是个主意。@Lali谢谢你的指点,我已经更新了问题。@Lali是的!由于[FromUri]属性,它可以工作。它使用与正文中表单编码字段相同的解析逻辑