2013-03-29 11 views
6

Chcę mieć mój generyczny trasa ustalić, czy ciąg kwerendy została przekazana w URL jak tenOperacje i parametry kwerendy w sieci Web API

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

Oto moja aktualna definicja trasy:

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

Przeczytałem kilka odpowiedzi, które mówią, aby dodać wartość dateOfLog jako opcjonalną akcję na Definicja trasy:

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

To nie działa, może robię coś złego, nie jestem pewien.


To jak jestem obecnie obchodzenia problemu, ale chciałbym wykorzystać moc ModelBinding o routingu silnika:

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

Proszę mi powiedzieć jak utworzyć definicję trasę, która będzie używać ModelBinding poprawnie i zamapuj mój niestandardowy adres URL na parametry kontrolera.

Odpowiedz

6

W działaniu kontrolera, po prostu dodaj DateTime dateOfLog jako parametr metody i dalej używaj łańcucha zapytania, ponieważ zostanie on poprawnie odwzorowany, Web API użyje prawidłowej metody przeciążenia, jeśli ją znajdzie.

+0

Próbowałem tego, bez powodzenia. Oto podpis metody: public DailyLogResponse Get (int id, DateTime dateOfLog), przy użyciu powyższej trasy nigdy nie trafia metoda. –

+0

OK, spróbuj użyć typu łańcucha zamiast DateTime w parametrze method. – Moo

+0

Tak, masz rację, to tak naprawdę jest to błąd parsowania DateTime, kiedy zmieniłem typ parametru, aby wywołać metodę, a wartości są obecne. Dzięki. –