【问题标题】:Trouble passing DateTime values to WebApi route将 DateTime 值传递给 WebApi 路由时遇到问题
【发布时间】:2017-05-25 15:33:19
【问题描述】:

我有一个 WebApi 项目,其中我有一个方法,该方法获取开始日期和结束日期,运行报告并返回结果。我正在尝试为此提出路线,到目前为止它看起来像

/api/MarketingEmailStatisticsReports/DateRange/{startDate}/{endDate}

也许有更好的路线,但这不是问题。

我只是通过打开浏览器并输入 URL 来测试这个。如果我将 startDate 和 endDates 设置为 DateTime 字段,我会得到 404 Not Found。如果我将它们设为字符串,我可以输入该方法,但是当我尝试将它们从字符串转换为实际的 DateTime 值时,日期无法解析。

我意识到如果我在日期中使用“/”字符会出现问题,所以我确实尝试使用“-”字符作为月-日-年值之间的分隔符。

在查看了一些 Microsoft 文档后,我看到了如何设置路由约束来检查 DateTime 值以及正则表达式,以确保以正确的格式输入值。我已接受此建议并正在使用以下内容:

[HttpGet]
[ResponseType(typeof(MarketingEmailStatisticsReport))]
[Route("/api/MarketingEmailStatisticsReports/DateRange/{startDate:datetime:regex(^\\d{4}-\\d{2}-\\d{2}$)/{endDate:datetime:regex(^\\d{4}-\\d{2}-\\d{2}$)}")]
public IHttpActionResult Get(DateTime startDate, DateTime endDate)

我得到了这个例外:

ArgumentException:正在解析 "^\d{4}-\d{2}-\d{2}$)/{endDate:datetime:regex(^\d{4}-\d{2}-\d{2}$" - ) 太多了。

这是我使用的网址:

 api/MarketingEmailStatisticsReports/DateRange/2017-05-22/2017-05-23

在我看来我没有太多的“)”字符...我需要做什么才能让它工作,或者我应该在查询字符串上传递日期吗?

【问题讨论】:

    标签: asp.net-web-api attributerouting


    【解决方案1】:

    你忘了关闭startDate参数定义:

    .../DateRange/{startDate:datetime:regex(^\\d{4}-\\d{2}-\\d{2}$)}/{endDate:datetime...
                                                                   ^
                                                           this curly bracket
    

    【讨论】:

    • 谢谢!我不敢相信我错过了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多