Я реализую условные запросы в веб-службе. Серверная часть может легко получить дату последнего изменения объекта, поэтому я отправляю Last-Modified и возвращаю If-Modified-Since. RFC для дат HTTP указывает формат, который совпадает с форматом < a href="https://msdn.microsoft.com/en-us/library/az4se3k1%28v=vs.110%29.aspx#RFC1123" rel="nofollow">описатель формата "R" в .NET а>.
Проблема в том, что DateTime.ToString("R")
правильно форматирует дату, но передача "R"
в ParseExact
не считывает часовой пояс обратно (есть спецификатор «туда и обратно», "O"
, но он не в том формате, который мне нужен). Вот пример в LinqPad:
DateTime lastModified = new DateTime(2015, 10, 01, 00, 00, 00, DateTimeKind.Utc);
string lastModifiedField = lastModified.ToString("R"); // Thu, 01 Oct 2015 00:00:00 GMT
DateTime ifModifiedSince = DateTime.ParseExact(
lastModifiedField, "R", CultureInfo.InvariantCulture);
ifModifiedSince.Kind.Dump(); // Unspecified
Конечно, я могу использовать методы для проанализированного DateTime
, чтобы преобразовать его в нужный мне формат, но как я могу заставить фреймворк использовать данные, которые уже есть?