.net 编写“GET”API终结点以接收可能为null的日期对象的最佳方法[C#]

wdebmtf2  于 2022-12-20  发布在  .NET
关注(0)|答案(1)|浏览(132)

假设我有一个"GET"端点,它接收两个参数startdate和enddate。
现在我们都知道开始日期有时可以为空,前端将构造如下的请求

Accounts/Statements/filter?startdate=null&enddate=xxxxxx.xxx.xxZ

我的问题是:
什么是构建API端点的最佳方法.(以c#方式)
API函数如下所示:

[HttpGet("Accounts/Statements/filter")]
  public async Task<IActionResult> GetStatementsFilter(DateTime startDate, DateTime endDate)

在这种情况下,如果startDate为空,则将接收为01/01/0001
或者

[HttpGet("Accounts/Statements/filter")]
  public async Task<IActionResult> GetStatementsFilter(string startDate, string endDate)

在本例中,startDate将接收一个字符串null,我需要小心地将其转换为Date对象以便以后使用,或者将其视为null。
或者

[HttpGet("Accounts/Statements/filter")]
  public async Task<IActionResult> GetStatementsFilter([FromBody] DateObj dateObj)

在这种情况下,要求前端更改并发送http请求主体中的参数,以便我们可以使用DateTime?作为参数。
你们觉得怎么样?

dtcbnfnu

dtcbnfnu1#

我会建议做这样的事情

[HttpGet("Accounts/Statements/filter")]
public async Task<ActionResult> GetStatementsFilter([FromQuery] DateTime? startDate, [FromQuery] DateTime endDate)

因此在本例中,startDate对于前端是可选的,您可以轻松地检查startDate是否为null。

curl -X 'GET' \
  'http://BASE_URL/Accounts/Statements/filter?endDate=2022-12-12' \
  -H 'accept: */*'

相关问题