如何在 .Net 7 中將 Query 繫結到陣列

Newbe36524發表於2022-12-21

在 .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

相關文章