Проблема не в json.
Таким образом, лямбда-функция AWS отправляется анонимным типом AWS.В основном просто быстрый и свободный объект.
Мне нужно из-за POST, чтобы отправить это как строку через переменную StringContent.Однако, если я сериализую его, контроллер Core API скажет: «Эй, я знаю это! Это JSON. Давайте десериализовать его».И так оно и есть.
Учитывая, что действие ожидает строку, контроллер говорит: «Нет действий, которые принимают этот объект, который у меня есть. Это неверный запрос».
Если, однако, я отправляюэто как чистая строка (например, «{key1: value1»} вместо «{\» key1 \ »: \« value1 \ »}») без кавычек вокруг ключей и значений, контроллер и действие говорят «HEY!Это строка. Я получил это. "
Проблема в том, что в этот момент это не валидный json, просто что-то вроде JSON.И поэтому это не правильно обрабатывается внутренностями действия.
На данный момент и без дополнительных знаний и исследований, обходное решение состоит в том, чтобы изменить сигнатуру действия для ожидания параметра типа Object
и специально его десериализовать.в рамках метода.
Хотя это работает, это не похоже на правильное решение, потому что я сейчас по сути открываю этот вызов для любого типа объекта вместо того, что мы действительно хотим, чтобы оно было.Это имеет смысл, поскольку функция AWS Lambda получает анонимный тип (т. Е. Объект).
Обновление: https://weblog.west -wind.com / posts / 2017 / Sep / 14 / Принятие необработанных запросов-содержимого-содержимого-в-ASPNET-Core-API-контроллерах
В этой статье рассматриваются типы решений, которые можно использовать для устранения этой проблемы.Суть в том, что Core API не знает, что делать со строкой.Существует несколько решений автора списков.Единственное, что я выбрал для реализации, - расширение входного форматера.Я кратко описал некоторые процессы здесь:
Новый класс -> RawRequestBodyFormatter : InputFormatter
CTOR -> SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/plain"));
override Boolean CanRead
override async Task<InputFormatterResult> ReadRequestBodyAsync
Проверьте context.HttpContext.Request.ContentType
, чтобы увидеть, содержит ли он ваш text/plain
модификатор.
При запуске добавьте следующее:
services.AddMvc(o => o.InputFormatters.Insert(0, new RawRequestBodyFormatter()));