【发布时间】: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