#javascript #c# #axios #asp.net-core-webapi
#javascript #c# #axios #asp.net-core-webapi
Вопрос:
Использование Reactjs с Axios для публикации / доступа к веб-интерфейсу dotnetcore.
- Axios получает вызов API для получения списка datetimesUTC
- Значения даты и времени ответа явно корректны в консоли / на дисплее.
- Вызов Axios GET api проходит в выбранном datetimeUTC
- API явно получает правильную дату и время UTC
- Вызов 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.