Почему моя строка даты и времени ISO с часовым поясом преобразует время после POST? - PullRequest
1 голос
/ 18 апреля 2019

Я помещаю объект JSON в виде строки в сервисный метод через API выборки.Некоторые свойства объекта - это строки ISO 8601 с часовыми поясами (например, «StartDate»: «2019-04-16T13: 46: 04-06: 00»).Вот как выглядит строка перед POSTing через API fetch.Метод сервиса C # REST, в который я отправляю сообщение, имеет только (объектный документ [FromBody]) в качестве параметра.При переходе к этому методу строка выглядит следующим образом: «StartDate»: «2019-04-16T19: 46: 04 + 00: 00».

Почему / куда преобразуется часовой пояс?Это была строка при отправке в службу и все еще строка там.

Что следует отметить: это прекрасно работает при использовании службы локально (через localhost).Когда он развернут, он не работает.

Пример кода (TypeScript, на стороне клиента):

    postDocument() {
        let doc = "{'StartDate': '2019-04-16T13:46:04-06:00'}";
        let response = await fetch("[serviceURL]/api/Document/AddDocument", 
        {
            method: "POST",
            headers: {
              Accept: "application/json",
              "Content-Type": "application/json"
            },
            body: doc
        });
    }

Пример кода (на стороне сервера (в TestService), C #):

    [HttpPost]
    public void AddDocument([FromBody]object document)
    {
        // Datetime string has already been converted, no longer has timezone.
        console.log(document.ToString()); 
        // startdate here is = "2019-04-16T19:46:04+00:00"
        return;//Doesn't matter what's in this method
    }

1 Ответ

1 голос
/ 18 апреля 2019

Добавление этих строк в метод Register моего WebApiConfig в App_Start вынудило мой сервис не анализировать DateTime и, следовательно, сохранило часовой пояс.

public static void Register(HttpConfiguration config)
{
    var jsonFormatter = config.Formatters.JsonFormatter;
    jsonFormatter.SerializerSettings.DateParseHandling = Newtonsoft.Json.DateParseHandling.None;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...