У меня проблема, с которой я не могу разобраться.
Я пытаюсь ВСЕГДА работать с UTC DateTime на стороне сервера.
У меня есть приложение AspNetCore Mvc с конечной точкой, которая принимаетзапросы, которые могут включать DateTimes.Я хочу, чтобы Mvc понял, что эти даты уже в UTC, и не преобразует их «снова».
Моя система находится в Испании, (UTC +2)
Если я отправлю запрос httpна мой локальный сервер вот так:
http://localhost:50004/api/Resources?appliesOn=2018-06-30T18:00:00.000Z
Я хочу иметь десериализованную дату и время в формате UTC, представляющую ту же дату, что и:
DateTime.SpecifyKind(new DateTime(2018, 6, 30, 18, 0, 0), DateTimeKind.Utc)
Но я вижу, что Mvc всегда преобразует дату2018-06-30T18: 00: 00.000Z через два часа: 2018-06-30 20: 00: 00
Я пытался указать Mvc использовать сериализатор / десериализатор UTC json, но ничего не изменилось:
services
.AddMvc()
.AddJsonOptions(options =>
{
options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
});
Есть ли способ отправить параметры запроса в запросе HTTP GET уже в виде представления времени и времени UTC?Я понял дату в ISO 8601, если он имеет суффикс Z, это означает «смещение нуля», которое должно интерпретироваться уже как время в формате UTC.Почему Mvc затем преобразует это и добавляет смещение на 2 часа?
Любые разъяснения будут высоко оценены!
PS: Это моя конечная точка, ничего особенного, как вы можете видеть:
[HttpGet("")]
public IActionResult GetResources()
{
var displayUri = Request.GetDisplayUrl();
var requestUri = new Uri(displayUri);
var filter = _filteredRequestFactory.Create(requestUri);
var resources = _myProjection.GetResourcers(filter);
return Ok(resources);
}