Почему мой веб-API не возвращает JSON? - PullRequest
0 голосов
/ 07 июня 2018

Я сделал очень простой контроллер веб-API для воспроизведения ошибки в более сложной, этот контроллер имеет только минимальный объем кода для воспроизведения ошибки.

Код контроллера выглядит следующим образом

using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;

namespace NWCloudBorgEmployee.Controllers
{

    public class WmsInfo
    {
        public string StoreName { get; set; }
        public string ItemName { get; set; }
        public string ItemQty { get; set; }
    }

    public class WmsInformation
    {
        public List<WmsInfo> WmsInfos { get; set; }
    }

    [Produces("application/json")]
    [Route("api/WmsInfo")]
    public class WmsInfoController : Controller
    {
        // GET: api/WmsInfo
        [HttpGet]
        public IEnumerable<string> Get()
        {
            return new string[] { "You need to send in a barcode as ID to get the correct return data" };
        }

        // GET: api/WmsInfo/5
        [HttpGet("{id}", Name = "Get")]
        public string Get(int id)
        {
            var test = new WmsInformation();
            test.WmsInfos = new List<WmsInfo>
            {
                new WmsInfo { StoreName = "SE001", ItemName = "Item1" , ItemQty = "10"},
                new WmsInfo { StoreName = "SE002", ItemName = "Item2" , ItemQty = "115"}
            };

            return test.ToString();
        }
    }
}

Когда я вызываю API, вместо данных JSON появляется строка, показанная ниже

"NWCloudBorgEmployee.Controllers.WmsInformation"

Почему он не возвращает JSON?

Ответы [ 3 ]

0 голосов
/ 07 июня 2018

Это действительно JSON.Это строка, так же как и ваш тип возвращаемого значения.

Я предполагаю, что вы пытаетесь сериализовать объект, а не использовать ToString, который будет возвращать имя типа по умолчанию.

Вы можете простоверните объект вместо использования ToString и настройте сигнатуру метода для учета изменений.

Это запустит процесс согласования содержимого и завершит сериализацию вашего объекта (вероятно) в JSON.

public WmsInformation Get(int is)
{
    var test = new WmsInformation
    {
        WmsInfos = ...
    }

    return test;
}
0 голосов
/ 07 июня 2018

Я рекомендовал использовать JsonResult вместо строки

public JsonResult Get(int id)
    {
        var test = new WmsInformation();
        test.WmsInfos = new List<WmsInfo>
        {
            new WmsInfo { StoreName = "SE001", ItemName = "Item1" , ItemQty = "10"},
            new WmsInfo { StoreName = "SE002", ItemName = "Item2" , ItemQty = "115"}
        };

        return new JsonResult(test);
    }

Надеюсь, вы найдете это полезным

0 голосов
/ 07 июня 2018

Поскольку вы вызываете .ToString() для объекта.

Измените сигнатуру вашего метода на:

public IActionResult Get(int id)

, а затем просто:

return Ok(test);

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

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