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

时间:2015-12-28 17:30:35

标签: c# asp.net json api asp.net-web-api

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

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

我假设因为这是一个GET方法,所以客户端必须通过url传递所有参数。

我目前在我的控制器中有一个动作方法,如下所示(我相信我目前已经设置好了,所以params作为查询字符串而不是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函数,这些函数需要几个随机参数,这些参数实际上不能归类为对象的属性。

2 个答案:

答案 0 :(得分:2)

您可以传递路线中的值。不需要在路线中添加参数名称,但它会使您的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}")]

答案 1 :(得分:0)

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

 [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}