Почему ПОЛУЧИТЬ дату правильно, но неверно в POST?

#javascript #c# #axios #asp.net-core-webapi

#javascript #c# #axios #asp.net-core-webapi

Вопрос:

Использование Reactjs с Axios для публикации / доступа к веб-интерфейсу dotnetcore.

  1. Axios получает вызов API для получения списка datetimesUTC
    • Значения даты и времени ответа явно корректны в консоли / на дисплее.
  2. Вызов Axios GET api проходит в выбранном datetimeUTC
    • API явно получает правильную дату и время UTC
  3. Вызов Axios POST api проходит в том же выбранном datetimeUTC
    • API получает локализованную дату и время вместо времени UTC.

Моя проблема: почему в мире мой API получает правильный UTC при получении, но локализован в POST?

Я попробовал пустые функции контроллера, одну с POST, одну с GET, и могу ясно видеть, что они разные.

 /// API post w/ Axios
axios.post("api/action", {
  date: date
});
  
 /// API get w/ Axios
axios.get("api/action", {
  params: { date: date}
});
  
 [HttpPost("{action}")]
public void Reconcile([FromBody]DateTime date)
{
  ...
}
  
 [HttpGet("{action}")]
public void Reconcile(DateTime date)
{
  ...
}
  

Действие GET api получает правильное значение даты и времени UTC.
Действие POST api получает неверную локализованную дату и время.

Редактировать:

  • Публикация

    • Сообщение Axios: дата: «2019-01-01T12:00:00.000Z»
    • Получен API: DateTime — {1/1/2019 12:00:00 ВЕЧЕРА}
  • ПОЛУЧИТЬ

    • Axios получает: дата: «2019-01-01T12:00:00.000Z»
    • Получен API: Дата и время — {1/1/2019 5:00:00 УТРА}

Я просто не могу понять, почему это меняется для post / get. Мне вообще не нужно было делать ничего особенного для GET, но весь день пытаться заставить POST работать — это кошмар. Я мог бы просто изменить его на GET, и все было бы хорошо, но семантически это действительно должно быть POST .

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

1. когда вы публикуете весь объект со date свойством.

2. @DanielA. Белый Что я могу сделать, чтобы это исправить?

3. вы должны написать класс модели, который имеет свойство date.

4. Итак, значения фактически одинаковы для полученных экземпляров. Вы могли бы вызвать date.ToUniversalTime() , чтобы получить экземпляр даты и времени, эквивалентный Utc. Что касается того, что изменяет полученную дату-время utc на локальную дату-время, которое было бы чем-то в привязке или десериализации, я недостаточно знаю о asp.net-core-webapi, чтобы сказать, с чего конкретно начать поиск.

5. The date is the same, but the time is different <= Нет, оба экземпляра имеют эквивалентное значение. Сервер может корректно преобразовать экземпляр DateTime между local и utc на основе флага DateTimeKind.