我們正在定義一個動作,用于搜索存盤在存盤庫中的檔案;該界面允許指定過濾器串列以縮小結果范圍。
[Route("search")]
[HttpGet]
[ProducesResponseType(typeof(List<DocumentDto>), (int)HttpStatusCode.OK)]
public async Task<ActionResult<DocumentDto>> GetDocuments(
[FromServices] IDocumentManager documentManager,
[FromQuery] Dictionary<string, string> filters)
{
//Do something
}
我們正在使用類似Dictionary<string, string> filters動作簽名中的引數,因為我們希望使用 GET 方法實作搜索,但使用動態引數串列。
過濾器只是key:value動作將傳遞給資料庫的物件串列,資料庫是唯一知道如何處理它們的層。
我們使用呼叫 url 的服務,如下所示:
/search?filter1=value1&filter2=value2&filter3=value3
系結似乎“有效”并filters填充了如下內容:
filters
[0] {[filter1, value1]}
[1] {[filter2, value2]}
[2] {[filter3, value3]}
檢查與字典相關的系結章節,似乎沒有記錄我們正在執行的查詢字串中傳遞的引數。
我們是否看到了具有約束力的副作用?
我們用于將過濾器從查詢字串傳遞到字典的語法是否受支持?
uj5u.com熱心網友回復:
使用這樣的系結或多或少有點問題。控制器上的字典正在捕獲所有查詢引數,例如,如果您的查詢字串是:
/search?filter1=value1&filter2=value2&filter3=value3&random=randomValue
你會在字典中看到:
filters
[0] {[filter1, value1]}
[1] {[filter2, value2]}
[2] {[filter3, value3]}
[3] {[random, randomValue]}
當 ASP.NET Core 為引數的模型系結創建背景關系時,模型名稱來自以下來源之一:
- 顯式名稱(例如
[FromQuery(Name = ...)] - 來自價值提供者(在本例中
QueryStringValueProvider)
在您的示例中,以上都不正確,因此系結背景關系中的模型名稱將為空。這將導致DictionaryModelBinder將查詢字串中的任意引數填充到字典中。
我建議根據您參考的檔案修復您的查詢字串。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/339316.html
上一篇:嘗試在Angular中使用ng-upload上傳檔案時遇到“TypeError:無法讀取未定義的屬性(讀取“模因”)
