Модель привязывается, но не отдельные параметры из json тела запроса в ASP. NET Core Web API - PullRequest
0 голосов
/ 06 апреля 2020

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

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

RequestBody : {"city": "ab c", "country": "xyz"}

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

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

enter image description here

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

[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));
        }
    }

}

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

1 Ответ

1 голос
/ 06 апреля 2020

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

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


Здесь есть аналогичный вопрос, но вам необходимо установить пакет nutons newtonsoft json. Вы получите только 1 строку, то есть весь файл json, тогда вы будете десериализовать его в объект, когда он попадет в контроллер.

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

...