在 .Net 7 中,我們可以透過繫結陣列的方式來接收來自查詢字串的引數。這樣就不需要再使用逗號分隔的字串來獲取引數了。
程式碼演示
假設我們需要從 query 上接受多個 id 並返回查詢的結果。例如: id=1&id=2
在 .Net 7 中,我們可以這樣實現:
public ActionResult GetResults([FromQuery]int[] ids)
{
// 使用 ids 陣列查詢結果
}
這樣就可以直接將 id=1&id=2 這樣的查詢字串繫結到 ids 陣列上。
藉助 IParsable 繫結更復雜的型別
如果我們需要繫結的型別比較複雜,例如:
public ActionResult GetResults([FromQuery]MyDate[] dates)
{
// 使用 dates 陣列查詢結果
}
我們可以透過實現 IParsable<T>
介面來實現自定義的繫結。
public class MyDate : IParsable<MyDate>
{
public int Month { get; set; }
public int Day { get; set; }
public void Parse(string input)
{
var parts = input.Split('-');
Month = int.Parse(parts[0]);
Day = int.Parse(parts[1]);
}
public static MyDate Parse(string s, IFormatProvider? provider)
{
var date = new MyDate();
date.Parse(s);
return date;
}
public static bool TryParse(string? s, IFormatProvider? provider, out MyDate result)
{
try
{
result = Parse(s, provider);
return true;
}
catch
{
result = default;
return false;
}
}
}
這樣就可以透過 dates=1-1&dates=2-2
這樣的查詢字串來繫結到 MyDate[]
陣列上了。
參考資料
- Bind arrays and string values from headers and query strings[1]
本文采用 Chat OpenAI 輔助注水澆築而成,如有雷同,完全有可能。
- 本文作者: newbe36524
- 本文連結: https://www.newbe.pro/ChatAI/How-to-binding-query-to-array-in-dotnet-7/
- 版權宣告: 本部落格所有文章除特別宣告外,均採用 BY-NC-SA 許可協議。轉載請註明出處!
參考資料
[1]Bind arrays and string values from headers and query strings: https://learn.microsoft.com/aspnet/core/fundamentals/minimal-apis?preserve-view=true&view=aspnetcore-7.0&WT.mc_id=DX-MVP-5003606#bind-arrays-and-string-values-from-headers-and-query-strings