如何通过查询字符串传递对象数组并在 asp.net 控制器中读取它们

How to pass an array of objects through a query string and read them in asp.net Controller

我正在构建一个 API 来生成发票编号。

我有以下InvItemclass

public class InvItem
{
    public string ItemCode;
    public double Quantity;
    public double SaleValue;
}

我有以下控制器方法

    [Route("api/InvoiceMaster/GetInvoiceNum")]
    [HttpGet]
    public IActionResult GetInvoiceNum(            
        string xDateTime,
        string BuyerName,
        double TotalBillAmount,            
        InvItem[] items
        )
    {


        ...
        var invItems = new List<InvItem>();
        invItems.AddRange(items);
        ...
        return Ok();            
    }

发票可以包含一项或多项。现在我想使用 GET 请求从邮递员(或任何其他应用程序)调用该方法。

我已经使用 POST 请求并从请求正文中读取参数构建了该方法。但这里的要求是严格获取请求。

我尝试了以下 url 但 无法在控制器的操作方法 'GetInvoiceNum'

中获取项目 的值
https://localhost:44365/api/InvoiceMaster/GetInvoiceNum?xDateTime=2020-01-01 12:00:00&BuyerName=elon&TotalBillAmount=1519&items[0].ItemCode=001897&items[0].Quantity=1&items[0].SaleValue=19&items[1].ItemCode=002899&items[1].Quantity=1&items[1].SaleValue=1500

如何将这个对象数组传递给 api?

您必须从 [FromQuery] 添加

public IActionResult GetInvoiceNum(            
        [FromQuery] string xDateTime,
        [FromQuery] string BuyerName,
        [FromQuery] double TotalBillAmount,            
        [FromQuery] InvItem[] items
        )

并通过添加 getters/setters

将字段转换为属性
public class InvItem
    {
        public string ItemCode { get; set; }
        public double Quantity { get; set; }
        public double SaleValue { get; set; }
    }