Модель привязывается, но не отдельные параметры из тела запроса json в веб-API ASP.NET Core

Используя почтальон, пытаюсь разместить данные "город" и "страна".

URL: http: // localhost: 8080 / api / Sample / SendData

RequestBody: {"city": "abc", "country": "xyz"}

Заголовки: Content-Type: application / json

Но я не могу получить данные, вместо этого получаю значения NULL, как показано ниже. Инкапсулируя свойства (город, страну) в модели, я могу видеть данные.

введите здесь описание изображения

Ниже приведен код, который я использую

[AllowAnonymous]
[ApiController]
public class SampleController : ControllerBase
{
    private readonly ILogger<SampleController> _logger;

    public SampleController(ILogger<SampleController> logger)
    {
        _logger = logger;
    }

    [HttpPost]
    [Route("api/Sample/SendData")]
    public ActionResult SendData(string city, string country)
    {
        try
        {
            if (ModelState.IsValid)
            {
                //return
                return Ok("Success");
            }
            else
            {
                throw new Exception("error");
            }
        }
        catch (Exception ex)
        {
            //return
            return BadRequest(Convert.ToString(ex));
        }
    }

}

Примечание: я хочу отправлять данные с использованием тела запроса, а не через строку запроса, поскольку данные, которые я собираюсь передать, в конечном итоге будут больше.


person YouKnowMe    schedule 06.04.2020    source источник
comment
@Nkosi, спасибо, поправил. Все еще есть проблема.   -  person YouKnowMe    schedule 06.04.2020
comment
создать режим и использовать его как параметр действия вместе с атрибутом [FromBody]   -  person Nkosi    schedule 06.04.2020
comment
@Nkosi, Использование модели работает нормально. Но я хочу конкретно использовать параметры.   -  person YouKnowMe    schedule 06.04.2020


Ответы (1)


С индивидуальными параметрами работать не будет. Когда вы используете тип данных json, контроллер asp.net всегда будет считать, что это объект, который вы отправляете.

Если вам нужны отдельные параметры, вы можете удалить заголовок запроса json и заменить его на text/plain и изменить тело запроса на ключ-значение.


Здесь есть аналогичный вопрос, но вам нужно будет установить пакет nuget newtonsoftjson. Однако вы получите только 1 строку, которая представляет собой весь файл json, затем вы десериализуете ее в объект, когда он попадет в контроллер.

POST Json без модели и Ajax

person Jerdine Sabio    schedule 06.04.2020