无法将DateTime值传递给WebApi路由

时间:2017-05-25 15:33:19

标签: asp.net-web-api attributerouting

我有一个WebApi项目,我有一个方法,它采用开始日期和结束日期,运行报告,并返回结果。我试图想出这条路线,到目前为止看起来像

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

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

我只是打开浏览器并输入网址来测试。如果我将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} $)/ {结束日期:日期时间:正则表达式(^ \ d {4} - \ d {2} - \ d {2} $" -   太多了。

这是我使用的网址:

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

我不认为我有太多的")"字符...我需要做些什么才能使它工作,或者我应该在查询字符串上传递日期呢?

1 个答案:

答案 0 :(得分:1)

您忘记关闭startDate参数定义:

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