我有一个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
我不认为我有太多的")"字符...我需要做些什么才能使它工作,或者我应该在查询字符串上传递日期呢?
答案 0 :(得分:1)
您忘记关闭startDate
参数定义:
.../DateRange/{startDate:datetime:regex(^\\d{4}-\\d{2}-\\d{2}$)}/{endDate:datetime...
^
this curly bracket