Миграция на Платформу версии 4.1
В Платформе Атомкод произведены следующие изменения, затрагивающие совместимость версий Платформы.
Изменения формата сообщений об ошибке от некоторых сервисов
Дополнительные свойства в ApiResult<T>.Error
Добавлены дополнительные свойства в некоторых сервисах в раздел ApiResult<T>.Error ответа.
Дополнительные свойства в разделе ApiResult<T>.Error ответа
Было
{
"message": "string",
"exceptionType": "string",
"code": "string",
"source": "string",
"inners":
[
{
"message": "string",
"exceptionType": "string",
}
],
"extra": "string",
"isError": false,
"id": "string",
"type": "string"
}
Стало
{
"message": "string", // пользовательское сообщение об ошибке
"exceptionType": "string",
"code": "string",
"source": "string",
"inners":
[
{
"message": "string",
"exceptionType": "string",
}
],
"extra": "string",
"isError": false,
"id": "string",
"techMessage": "string", // техническое сообщение об ошибке
"dateTime": "DateTimeOffset",
"stackTrace": "string",
"data": {}, // Dictionary<string,string>?
"innerErrors": [], // IList<IErrorDescription>?
}
Изменения в библиотеке Models.Base
Изменение типа возвращаемого значения от некоторых сервисов с Info на IErrorDescription
Изменился тип возвращаемого значения от некоторых сервисов с ASE.MD.Platform.Base.Error.Info на ASE.MD.Platform.Base.Models.Errors.IErrorDescription.
Ответ десериализуется при помощи конвертеров:
ASE.MD.Platform.Base.Serialization.Converters.Newtonsoft.ErrorDescriptionNewtonsoftConverter;ASE.MD.Platform.Base.Serialization.Converters.System.ErrorDescriptionSystemTextConverter.
Системный сериализатор сериализует и десериализует IErrorDescription в ErrorDescription.
Сериализатор Newtonsoft работает в режиме совместимости:
- при чтении JSON он принимает поля как от
Infoтак иIErrorDescriptionи приводит их к объектуErrorDescription. - при записи JSON он извлекает данные из
IErrorDescriptionи Формирует набор свойств, десериализуемых как в старыйInfo, так и в новыйIErrorDescription.
Возможные проблемы и их решения
- Автотесты требуется приспособить к толератному отношению к этим свойствам, пока не будет выполнен полный переход).
- Прямые обращения к
Inners[0].Messageтребуется заменить наInnerErrors[0].MessageилиInnerErrors[0].TechMessage. - Передача объекта Error в конструктор потомков
BaseException. Добавьте конструктор исключения конструктор, принимающийIErrorDescription(можно как вместе, так и вместоInfo). Также рекомендуется перейти наExtendedException.
Изменение типа поддерживаемой ошибки в IResultWithError
Теперь IResultWithError поддерживает ошибку не Platform.Error.Info, а ASE.MD.Platform.Base.Interfaces.IErrorDescription
Если Ваш код где-то использует инфо рмацию о вложенных ошибках, то она теперь содержится не в Inners, а в InnerErrors.
Пример
Строку
result.Error.Inners.Select(e => e.Message)
замените на
result.Error?.InnerErrors?.Select(e => e.Message)