将复杂对象传递给.netcore1.1 Webapi虽然查询字符串

问题描述:

我想通过一个复杂的对象,虽然查询字符串,但由于某种原因,它不工作。我有一个复杂的对象,看起来像这样:将复杂对象传递给.netcore1.1 Webapi虽然查询字符串

public class QueryOptions 
{ 
    public QueryParameter[] Parameters = new QueryParameter[0]; 
} 

而且我想送的几种方法,但没有什么工作:

我的WebAPI的方法是这样的:

[HttpGet] 
[AllowAnonymous] 
public async Task<TDTO[]> GetList([FromQuery] QueryOptions queryOptions) 
{ 
    return await this._service.GetList(queryOptions); 
} 

我已经尝试过并且无法使用FromQuery属性。 的网址的查询看起来像这样:

/api/users?Parameters[0].PropertyName=FirstName &参数[0]。价值= GTitzy &参数[0] .FilterCondition = 0

我也试着用开头的对象的名字。发送请求,但queryOptions始终没有参数。

如何通过查询字符串传递这个复杂的对象?

+1

不要。使用body和form.post()。 –

+0

这不会起作用,GET不应该用于发送复杂的对象。这似乎是[XY问题](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。你试图达到的最终目标是什么? – Nkosi

+0

@Nkosi我想要允许基本属性的动态过滤,我试图通过查询选项dto来过滤我的列表。我想使用get,所以你可以在将URL传递给用户时保持URL –

假设

public class QueryParameter { 
    public string PropertyName { get; set; } 
    public string Value { get; set; } 
    public string FilterCondition { get; set; } 
} 

你需要更新你的模型暴露的公共属性[FromQuery]知道什么结合。

public class QueryOptions { 
    public QueryParameter[] Parameters { get; set; } 
} 

你也应该考虑读Model Binding: Customize model binding behavior with attributes

+0

我忘了让我的课程使用属性! –

+0

@ johnny5你应该考虑寻找一种更简单的方式来传递你的查询选项。国际海事组织这是复杂的事情 – Nkosi

+0

是啊我一直在寻找一个好方法,但最终这样做是因为,这是一般工作的所有我的crud实体,其应用通用筛选和搜索API,我是在我的截止日期前嘎然而止 –