2017-05-25 85 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