Итак, у меня есть контроллер WebAPI 2, написанный на С#, в котором помимо прочего используется параметр запроса типа DateTime. Это API, который возвращает все значения из хранилища данных на основе фильтра даты. Что-то вроде, скажем:
public MyThing GetThing([FromUri]DateTime startTime)
{
// filter and return some results
}
Я столкнулся с двумя проблемами:
- По какой-то причине, несмотря на то, что в ISO 8601 UTC отформатирована (с Z) дата, WebAPI де-сериализует ее как локальную DateTime, а не Utc. Это явно нежелательно. Я не уверен, как изменить конвейер, чтобы он правильно понял UTC-0 DateTimes.
- Я возвращаю ссылку на ресурс как часть тела ответа, в котором я использую объекты UrlHelper (полученные из исходного класса абстрактного класса ApiController) Link() для генерации href. Я передаю набор параметров запроса, которые я хочу добавить в маршрут. По какой-либо причине передача форматов DateTime в формате, отличном от ISO8601. Я не могу найти, где это контролируется. Я не хочу явно указывать ToString(), поскольку это не подлежит обязательному исполнению.
Короче говоря, я хочу выяснить, как убедиться, что
- DateTimes, которые передаются через параметры запроса FromUri, правильно понимаются как ISO8601, включая соответствующие смещения часовых поясов
- UrlHelper.Link() генерирует ISO8601-совместимые DateTimes в строке выходного URI в общепринятом статически типизированном виде.
WebAPI 2 действительно предоставляет прекрасные возможности для форматирования JSON, которые я использую, поэтому простое возвращение DateTime в корпусе JSON форматирует его по желанию с использованием формата ISO8601, а также правильно понимается в теле JSON [FromBody]. Я не могу найти способы потянуть строки вокруг обработки URI, хотя, и я бы очень хотел!