Веб-API [FromBody] всегда null - PullRequest
0 голосов
/ 05 мая 2020

В настоящее время я создаю веб-API, который записывает в таблицу. Я использую тег [FromBody] для передачи значений для таблицы.

Проблема в том, что значение [FromBody] всегда равно нулю. Я использую Advanced Rest Client для тестирования своего API.

public HttpResponseMessage Post(int id, [FromBody]string value)
{
     //DO Something
}

enter image description here

Ответы [ 2 ]

2 голосов
/ 05 мая 2020

Проблема в преобразовании типов. Вы отправляете массив с одним значением, содержащим словарь, и пытаетесь получить строку в методе. ASP. NET не может преобразовать вашу структуру в string и использовать null в качестве значения по умолчанию.

Итак, простой способ проверить метод - передать простую строку в теле. Но правильный способ - изменить тип объекта, переходящего в метод действия:

public HttpResponseMessage Post(int id, [FromBody]List<Dictionary<string,string>> value)
{
     //DO Something
}

Странно разбирать JSON вручную, когда это делает система, но тогда вы должны передать string методу . Просто заверните свое тело в "", и вы получите простой JSON в методе. Также вы можете прочитать тело вручную через StreamReader:

public HttpResponseMessage Post(int id)
{
    using (StreamReader reader = new StreamReader(Request.Body, Encoding.UTF8))
    {  
        var plainBody = reader.ReadToEnd();
    }
}
0 голосов
/ 05 мая 2020

Если вы не хотите десериализовать тело, вы можете просто прочитать строку из свойства Request.Body.

public Task<HttpResponseMessage> Post(int id)
{
    var reader = new StreamReader(Request.Body);
    var bodyString = await reader.ReadToEndAsync();

    ...
}

...