无法将 DateTime 值传递给 WebApi 路由

Trouble passing DateTime values to WebApi route

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

/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: parsing "^\d{4}-\d{2}-\d{2}$)/{endDate:datetime:regex(^\d{4}-\d{2}-\d{2}$" - Too many )'s.

这是我使用的URL:

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

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

您忘记关闭startDate参数定义:

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