2017-05-25 89 views
1

我有一个WebApi项目,其中有一个方法需要开始日期和结束日期,运行报告并返回结果。我试图拿出这条路线,目前看起来像它无法将DateTime值传递给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 

它不看我,我有太多的“)”字符...什么我需要做的就是这工作,还是应该在查询字符串上传递日期?

回答

1

你忘了关startDate参数定义:

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

谢谢!我不敢相信我错过了! – DesertFoxAZ