Передача типа даты-времени или строки, который выглядит как дата, в качестве параметра URL / (.net webapi)

#.net #datetime #asp.net-web-api #routes #controller

Вопрос:

Получил объект с именем Item с DateTime полем даты, которое настроено с аннотацией данных Column(TypeName="Date")] (хранит только дату без указания времени в бд).

В моем контроллере у меня есть GET метод, который должен возвращать список результатов. Метод parameter / url должен выглядеть как свидание, но, я думаю, это не обязательно должно быть свидание.

Пример: www.localhost:port/16-3-2021

  1. Использую ли я DateTime в качестве параметра или String , что проще/лучше?
  2. Если параметр есть string , как мне правильно проанализировать его до короткой даты (с форматированием, как указано выше), чтобы я мог сказать:

дБ.Товары.Где(товар => товар.Дата == дата)

  1. Если параметр — DateTime как настроить маршрутизацию в соответствии с заданным форматом (как указано выше)?

Ответ №1:

Во-первых, весь подход кажется мне неправильным, и кажется, что использование Entity Framework решит ваши проблемы с типами. Чтобы ответить на ваши вопросы:

  1. Вы можете использовать только string внутри url .
  2. Если я правильно понял, вам нужен только метод, чтобы вывести a string из вашего Item класса, как показано ниже
 public class Item {

    Date date { get; set; }

    public dateToString()
    {
         return $"{this.date.Day}-{this.date.Month}-{this.date.Year}";
    }
}
 
  1. Просто используйте dateToString каждый раз, когда вам нужно пройти date как a string , чтобы не потерять свой формат.

Комментарии:

1. На самом деле я использую EntityFramework. НО поддерживаемый формат 2021-03-16 соответствует xkcd.com/1179 . И то, что мне нужно, находится 16-03-2021 в URL-адресе, а затем каким-то образом проанализировать его или что-то еще, что нужно сделать, чтобы я мог фильтровать по своему DateTime свойству Item класса. Куда-нибудь в репо я должен пойти db.Items.Where(item => item.Date == date) или около того.