2016-06-28 5 views
0

У меня есть контроллер, чтобы получить количество элементов, которые больше определенной даты. Хранилище выглядит как:Отправка paramater postman api get request

public Dictionary<int, int> GetAllComplaintsCount(DateTime start) 
    { 
     try 
     { 
      return _context.Checklists 
       .Where(a => a.COMPLAINT.Received_DT > start) 
       .GroupBy(a => a.MonitorEnteredEmpID) 
       .ToDictionary(g => g.Key, g => g.Count()); 
     } 
     catch (Exception ex) 
     { 
      _logger.LogError("Could not get am with checklist", ex); 
      return null; 
     } 
    } 

Edit Я включил мои маршрутизаторы, чтобы увидеть, если это правильно:

  app.UseMvc(routes => 
     { 
      routes.MapRoute(
       name: "default", 
       template: "crams/{controller=Home}/{action=Index}/{id?}"); 
      routes.MapRoute(
       name: "route", 
       template: "crams/{controller}/{action}/{start?}"); 
     }); 

Вопрос Без параметра запуска, я могу получить http://localhost:8000/crams/api/counts через почтальон. Я не уверен, однако, как включить дату через почтальона, чтобы он мог только вытягивать даты, которые больше, чем начать.

Я попытался

http://localhost:8000/crams/api/counts/2016-1-1 но возвращается нуль.

+0

Передайте дату в виде строки и проанализируйте ее в действии. – Jasen

+0

@ Ясен это то, что делает связующее устройство по умолчанию –

ответ

1

/API/имп/2016-1-1 возвращается утратившим

Вашего API является:

... GetAllComplaintsCount(DateTime start) 

так что ваш URL должен быть:

/api/counts?start=2016-1-1 

Это будет стандартная маршрутизация. Как вы уже не включены в маршрут вашего вопроса, я полагаю (учитывая симптомы), что это по умолчанию:

/api/{controller}/{id} 

т.е. с использованием /api/counts/2016-1-1 определяет «2016-1-1» в качестве параметра id, но вы не» t имеет параметр id, и вы не указали значение для start, так что вы получите null.

Вы можете добавить маршрут в

/api/{controller}/{start} 

Я только что создал апи как:

[HttpGet] 
    public string Test(DateTime d) 
    { 
     return d.ToString(); 
    } 

и называется, через почтальона (хотя любой клиент даст тот же результат)

http://localhost/api/../Test?d=2016-1-1

и он вернул ожидаемый «01/01/2016 00:00:00»

+0

Я ценю ваш продуманный ответ! Я попытался добавить маршрут под своим маршрутом по умолчанию и назвал его маршрутом, и теперь мои маршруты выглядят так: app.UseMvc (routes => { routes.MapRoute ( имя: "default", template: "crams/{controller = Home}/{action = Index}/{id?} "); routes.MapRoute ( имя:" route ", template:" crams/{controller}/{action}/{start?} "); }); – epv

+0

Затем я использовал ваш тест, чтобы узнать, будет ли он работать: поэтому я добавил тестовый httpget, но когда я запустил «http: // localhost: 8000/crams/api/counts/Test? D = 2016-1-1» I получить 404 не найдено! Можете ли вы сказать мне, допустил ли я ошибку? – epv

+0

Сначала - ваша оригинальная работа с '../ counts? Start = 2016-1-1'? –

0

Вы можете попытаться передать тики вашего API

http://localhost:8000/crams/api/counts/636027305821590000

А потом

public Dictionary<int, int> GetAllComplaintsCount(Int64 dateTicks) 
    { 
     try 
     { 
      var startDate = new DateTime(dateTicks); 
      return _context.Checklists 
       .Where(a => a.COMPLAINT.Received_DT > startDate) 
       .GroupBy(a => a.MonitorEnteredEmpID) 
       .ToDictionary(g => g.Key, g => g.Count()); 
     } 
     catch (Exception ex) 
     { 
      _logger.LogError("Could not get am with checklist", ex); 
      return null; 
     } 
    } 

Вот информация о том, как получить Ticks от даты (с использованием JS)

How to convert JavaScript date object to ticks

Надеется, что это помогает:

+0

Просто интересно, вы попробовали это? –

+0

Извините, у меня нет .net env для проверки на данный момент ... вы получаете ошибки? Я отправил параметры DateTime раньше в приложения, используя либо тики, либо определенную строку формата, и использовал .ParseExact ... Если в моем примере кода есть ошибка, я могу ее обновить. –

+0

Проблема заключалась в том, что маршрутизация не соответствовала параметру имя - это также будет иметь место здесь. –

 Смежные вопросы

  • Нет связанных вопросов^_^