【问题标题】:How to pass null for datetime in query string?如何在查询字符串中为日期时间传递 null?
【发布时间】:2021-07-13 12:49:45
【问题描述】:

我正在尝试执行发送 DateTime 的 API?参数作为查询字符串。以下是我的 API:

[HttpGet("filter")]
public async Task<ActionResult<PagedList<Inv>>> GetFilterAsync([FromQuery] DateTime? dateFrom, [FromQuery] DateTime? dateTo, [FromQuery] int page, [FromQuery] int pageSize)
    {

但是当我尝试如下在邮递员中执行它时,我收到了一个错误。

http://localhost:5000/api/Inv/filter?dateFrom=null&dateTo=null&page=1&pageSize=20

这是错误:

{
    "errors": {
    "dateTo": [
        "The value 'null' is not valid."
    ],
    "dateFrom": [
        "The value 'null' is not valid."
    ]
    },
    "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
    "title": "One or more validation errors occurred.",
    "status": 400,
    "traceId": "|8c4093d7-485e79a6a805ceae."  
}

但是当我将它留为如下空白时,它会起作用。我们不能通过null 而不是blank space 吗?

http://localhost:5000/api/Inv/filter?dateFrom=&dateTo=&page=1&pageSize=20

此外,当我们尝试从 UI 发送它们时也会出现同样的错误。

【问题讨论】:

  • 也许解析器认为null 不为空。这是一个值为“null”的字符串。就像“2021-07-13”一样。并未能将其解析为DateTime
  • 我认为省略它是预期的方式。 A您可以编写自己的价值提供者。见:docs.microsoft.com/en-us/aspnet/core/mvc/models/…
  • 现在不要,如何构建查询字符串,但是如果为您的数据定义了一个类型,您可以为 DateTo 定义一个 getter,类似于 'return dateTo ?? string.Empty'(以 dateTo 作为道具的后备字段 - 在这种情况下没有自动道具)

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


【解决方案1】:

只是不要在查询字符串中传递参数。

代替
http://localhost:5000/api/Inv/filter?dateFrom=null&amp;dateTo=null&amp;page=1&amp;pageSize=20
试试
http://localhost:5000/api/Inv/filter?page=1&amp;pageSize=20

【讨论】:

  • 从前端也是,我们应该这样处理吗?
  • 肯定有一种方法可以编写自定义解析器并使用它,这样null 就可以根据需要进行解析,但我认为这里不传递参数是最简单的选择。
猜你喜欢
  • 2017-10-17
  • 1970-01-01
  • 2021-01-09
  • 2012-07-03
  • 1970-01-01
  • 2017-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多