Запущенный параметр появляется пустым в .NET Core 3.0 API - PullRequest
1 голос
/ 11 октября 2019

Я создал приложение веб-API ASP.net core 3.0 и добавил к нему HttpPost конечную точку.

Когда я отправляю сообщение с использованием почтальона на эту конечную точку, конечная точка не получает JSON, который я передаю ей. и вместо этого получает значение NULL.

Есть ли что-то, что изменилось в .NET Core 3.0, которое изменило / сломало конечные точки сообщения HTTP?

JSON, который я опубликовал:

{
  "status": "0",
  "operation":"",
  "filter":"",
  "currentOrderList": [
  ]
}

Код контроллера:

[Route("api/[controller]")]
public class ValuesController : Controller
{
    // GET: api/<controller>
    [HttpGet]
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET api/<controller>/5
    [HttpGet("{id}")]
    public string Get(int id)
    {
        return "value";
    }

    // POST api/<controller>
    [HttpPost]
    public void Post([FromBody]string value)
    {
    }

    // PUT api/<controller>/5
    [HttpPut("{id}")]
    public void Put(int id, [FromBody]string value)
    {
    }

    // DELETE api/<controller>/5
    [HttpDelete("{id}")]
    public void Delete(int id)
    {
    }
}

URL-адрес, на который я отправляю сообщение, https://localhost:44336/api/values. Я вижу, что конечная точка поражена тем, что метод вызывается во время отладки в Visual Studio. Единственная проблема заключается в том, что параметр имеет значение null

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Создайте модель для соответствия заданным данным

public class MyClass {
    [JsonProperty("status")]
    public int Status { get; set; }
    [JsonProperty("operation")]
    public string Operation { get; set; }
    [JsonProperty("filter")]
    public string Filter { get; set; }
    [JsonProperty("currentOrderList")]
    public string[] CurrentOrderList { get; set; }
}

Затем обновите действие контроллера, чтобы ожидать требуемый тип

//POST api/values
[HttpPost]
public IActionResult Post([FromBody]MyClass value) {
    if(ModelState.IsValid) {
        //...
        return Ok();
    }
    return BadRequest();
}
0 голосов
/ 13 ноября 2019

В дополнение к добавлению аннотаций [JsonProperty], как сказал Нкоси, мне также пришлось добавить пакет nuget

Microsoft.AspNetCore.Mvc.NewtonsoftJson

идобавить .AddNewtonsoftJson() в Startup.cs. Я обнаружил это в другом вопросе о стековом потоке, но ни одно из этих изменений само по себе не было достаточным, чтобы мои модели увлажнились. Потребовалось и то и другое, чтобы все заработало.

services.AddMvc().AddRazorRuntimeCompilation().AddNewtonsoftJson();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...