创建一个GET操作方法,该方法接受多个参数并返回日期列表

本文关键字:参数 返回 列表 日期 方法 一个 GET 操作方法 创建 | 更新日期: 2023-09-27 18:28:27

我正在创建一个Web API,客户端需要能够发出GET请求,该请求以JSON形式返回日期列表。客户端需要指定以下参数才能获得结果:

startDate (datetime)  
endDate (datetime)  
offset (int)  
type (string)  

我假设,由于这是一个GET方法,客户端必须通过url传入所有参数。

我目前在我的控制器中有一个操作方法,看起来如下(我相信我目前已经设置好了,所以参数是作为查询字符串而不是在URL中传递的):

public IActionResult Get(DateTime startDate, DateTime endDate, int offset = 0, string type = "defaultType")
{
    List<DateTime> sampleDates = new List<DateTime>()
    {
        new DateTime(2015, 1, 22),
        new DateTime(2015, 2, 22),
        new DateTime(2015, 3, 22),
        new DateTime(2015, 4, 22),
    };
    return Ok(sampleDates);
}

在上面的例子中,我还没有对params做任何事情,因为这是一个测试。

我想知道这是否是创建一个接受多个参数并返回日期列表的函数的正确方法。如果是的话,有人能给我一个URL在客户端上的样子的例子吗。

此外,是否可以让用户使用POST将JSON对象作为参数发送?

我正在尝试看看我的选择是什么,因为我正在构建的API将有几个GET函数,这些函数接受一些随机参数,这些参数不能真正归类为对象的属性。

创建一个GET操作方法,该方法接受多个参数并返回日期列表

您可以在路由中传递值。不需要将参数名称添加到路由中,但它可以让API的用户清楚地知道预期的参数是什么。

[HttpGet, Route("api/sampledates/startdate/{startDate}/enddate/{endDate}/offset/{offset}/type{type}")]
public IActionResult Get(DateTime startDate, DateTime endDate, int offset = 0, string type = "defaultType")
{
    List<DateTime> sampleDates = new List<DateTime>()
    {
        new DateTime(2015, 1, 22),
        new DateTime(2015, 2, 22),
        new DateTime(2015, 3, 22),
        new DateTime(2015, 4, 22),
    };
    return Ok(sampleDates);
}

您也可以使用约束来控制传入的参数:

[HttpGet, Route("api/sampledates/startdate/{startDate:datetime}/enddate/{endDate:datetime}/offset/{offset:int:min(0)}/type{type}")]

您可以在查询字符串中发送参数

 [HttpGet]
    public IActionResult Get([FromUri]DateTime startDate,[FromUri] DateTime endDate, [FromUri]int offset = 0, [FromUri]string type = "defaultType")
    {
        List<DateTime> sampleDates = new List<DateTime>()
        {
            new DateTime(2015, 1, 22),
            new DateTime(2015, 2, 22),
            new DateTime(2015, 3, 22),
            new DateTime(2015, 4, 22),
        };
        return Ok(sampleDates);
    }

使用查询字符串发送参数,如下所示

api/sampledates?startdate=startDate:datetime}&enddate={endDate:datetime}&offset={offset:int:min(0)}&type={type}