У меня проблемы с DateTimes в моем проекте ASP.NET C# Web Api 2. Мне нужно пройти через дату ISO 8601 в моей строке запроса следующим образом:
api/resource?at=2016-02-14T23:30:58Z
Мой метод контроллера выглядит следующим образом
[HttpGet("/resource")]
public IActionResult GetResource([FromQuery]DateTime? at = null)
{
if (!at.HasValue)
{
at = DateTime.UtcNow;
}
else
{
at = DateTime.SpecifyKind(at.Value, DateTimeKind.Utc);
}
// ...
}
Обратите внимание на небольшой хак — дата приходит с DateTimeKind Local, несмотря на то, что она указана с помощью «Z», означающего UTC. Даты всегда должны передаваться в формате UTC, хотя в идеале я бы не хотел, чтобы это было ограничением. Я использую NodaTime для внутреннего использования и раскрываю DateTime в моделях запросов и ответов только по устаревшим причинам.
Почему мои даты анализируются как DateTimeKind местного значения?
Как я могу прочитать свои даты UTC из строк запроса с помощью веб-API ASP.NET 2?