Миграция на Платформу версии 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)