2017-08-02 33 views
2

我想通過一個複雜的對象,雖然查詢字符串,但由於某種原因,它不工作。我有一個複雜的對象,看起來像這樣:將複雜對象傳遞給.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 –

回答

2

假設

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,我是在我的截止日期前嘎然而止 –