2017-05-25 1 views
1

J'ai un projet WebApi dans lequel une méthode prend une date de début et une date de fin, exécute un rapport et renvoie les résultats. Je suis en train de trouver la route pour cela, et jusqu'à présent son ressemblant àProblème lors de la transmission des valeurs DateTime à la route WebApi

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

Peut-être il y a une meilleure voie, mais qui est vraiment pas le problème.

Je testais cela en ouvrant simplement un navigateur et en tapant l'URL. Si je définis les champs startDate et endDates en tant que DateTime, j'obtiens un 404 Not Found. Si je leur fais des chaînes, je peux entrer la méthode mais les dates ne sont pas analysables quand je tente de les convertir de chaînes en valeurs DateTime réelles.

Je me rends compte que si j'utilise des caractères "/" dans la date qui sera un problème, j'ai essayé d'utiliser les caractères "-" comme séparateur entre les valeurs mois-jour-année.

Après avoir examiné une partie de la documentation de Microsoft, j'ai vu comment vous pouvez mettre des contraintes d'itinéraire pour vérifier des valeurs DateTime ainsi qu'une expression régulière pour vous assurer que la valeur a été entrée au format correct. J'ai pris ce conseil et je suis en utilisant les éléments suivants:

[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) 

Je reçois cette exception:

ArgumentException: analyse syntaxique «^\ d {4} - \ d {2} - \ d { 2} $)/{endDate: datetime: regex (^ \ d {4} - \ d {2} - \ d {2} $ "- Trop.

Ceci est l'URL que j'utilisais:

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

Il ne me semble pas que j'ai trop «) » personnages ... Que dois-je faire pour obtenir ce travailler, ou devrais-je passer les dates sur la chaîne de requête à la place?

Répondre

1

Vous avez oublié de fermer la définition des paramètres startDate:

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

Merci! Je ne peux pas croire que j'ai raté ça! – DesertFoxAZ