2013-03-29 17 views
6

voglio avere il mio percorso generico determinare se una stringa di query è stata approvata nella URL come questoazioni e parametri QueryString in API Web

http://localhost/query/DailyLogs/1?dateOfLog='1/13/2013' 

Ecco la mia definizione rotta corrente:

routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "query/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional} 
     ); 

ho letto alcune risposte che dicono di aggiungere il valore dateOfLog come un'azione opzionale sul defintion percorso:

routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "query/{controller}/{id}/{dateOfLog}", 
      defaults: new { id = RouteParameter.Optional, 
      dateOfLog = RouteParameter.Optional } 
     ); 

Questo non sembra funzionare, forse sto facendo qualcosa di sbagliato, non sono sicuro.


Questo è il modo Attualmente sto gestire il problema, ma vorrei usare il potere ModelBinding del motore di routing:

var queryValue = Request.RequestUri.ParseQueryString(); 
string dateOfLog = queryValue["dateOfLog"]; 

prego di dirmi come creare una definizione di percorso che utilizzerà ModelBinding correttamente e mappa il mio URL personalizzato ai parametri del controller.

risposta

6

Nell'azione del controller, includere solo DateTime dateOfLog come parametro di metodo e continuare a utilizzare la stringa di query poiché verrà mappata correttamente, l'API Web utilizzerà il metodo corretto di sovraccarico se la trova.

+0

L'ho provato, senza successo. Ecco la firma del metodo: public DailyLogResponse Get (int id, DateTime dateOfLog), l'utilizzo del percorso sopra questo non raggiunge il metodo. –

+0

Ok, prova a utilizzare un tipo di stringa anziché DateTime nel parametro method. – Moo

+0

Sì, sei corretto è in realtà un errore di analisi DateTime, quando ho cambiato il tipo di parametro in stringa il metodo si attiva e i valori sono presenti. Grazie. –

Problemi correlati