Asp. net Сбой FromBody, когда полезная нагрузка равна нулю - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть контроллер, который ожидает получить json полезную нагрузку ie

public async Task<IActionResult> InitUser([FromBody] Tenant tenant)

Это нормально, когда отправляется действительная json полезная нагрузка, но если полезная нагрузка не отправляется, я получаю ошибка

No input formatter was found to support the content type 'null' for use with the [FromBody] attribute

И клиенту возвращается код состояния HTTP 415.

Можно ли перехватить этот случай и установить для полезной нагрузки json какое-то значение по умолчанию, чтобы входной форматировщик не выдаст эту ошибку?

1 Ответ

0 голосов
/ 23 апреля 2020

Вы можете удалить атрибут [FromBody] и получить тело непосредственно из HTTP-запроса. Убедитесь, что у вас есть украшение атрибута [HttpPost].

В приведенном ниже примере вы можете увидеть, как это сделать очень простым способом. Вы также можете создать собственный CustomAttribute и промежуточное программное обеспечение, если хотите сделать его системным и элегантным решением.

Вам также нужно будет разобрать тело. Для этого вы можете использовать JsonConverter, если хотите.

[HttpPost]
        public async Task<IActionResult> Index()
        {
            Tenant tenant;
            string result;
            using (var reader = new StreamReader(Request.Body))
            {
                var body = await reader.ReadToEndAsync();

                result = body;
            }

            //Define the naming strategy here if you need
            DefaultContractResolver contractResolver = new DefaultContractResolver
            {
                //NamingStrategy = new SnakeCaseNamingStrategy()
                NamingStrategy = new CamelCaseNamingStrategy()
            };

            //Optional configuration to add in DeserializeObject constructor as second param.
            var jsonSerializerSettings = new JsonSerializerSettings
            {
                ContractResolver = contractResolver,
            };

            tenant = JsonConvert.DeserializeObject<Tenant>(result);

            Console.WriteLine(tenant);
            return View();
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...