【问题标题】:I am getting Status 500 code from POSTMAN when sending POST request to Asp.Net Core Web Api (version 3.1)向 Asp.Net Core Web Api(版本 3.1)发送 POST 请求时,我从 POSTMAN 获得状态 500 代码
【发布时间】:2020-11-05 18:00:58
【问题描述】:

我被 POSTMAN 和 Asp.Net Core Web Api 之间的 web api 测试卡住了。

Web 应用程序可能仅在可以从 URL 进行模型绑定时才响应。 但是,每次它应该从 HTTP 请求正文进行模型绑定时,它都会响应状态 500 代码。

我的代码如下。

Web Api 控制器代码:

    [ApiController]
    [Route("api/[controller]")]
    public class OrderController : ControllerBase
    {
        private IOrderRepository _orderRepo;

        public OrderController(IOrderRepository repo) // Dependency Injection
        {
            _orderRepo = repo;
        }

        [HttpGet]
        public IEnumerable<Order> Get() => _orderRepo.Orders;

        [HttpGet("{id}")]
        public Order Get(int id) => _orderRepo[id];

        [HttpPost]
        public Order Post([FromBody] Order order) => _orderRepo.Add(order);

模型类代码:

    public class Order
    {
        public int Id { get; set; } = 0; 
        public string ClientName { get; set; }
        public string Menu { get; set; }
        public int NoOfMenu { get; set; }

        public Order(string clientName, string menuName, int noOfMenu)
        {
            ClientName = clientName;
            Menu = menuName;
            NoOfMenu = noOfMenu;
        }
    }

POST 操作方法的存储库代码:

        // deleted for brevity

        private Dictionary<int, Order> _orderlist = new Dictionary<int, Order>();
        
        public Order Add(Order newOrder)
        {
            if(newOrder.Id == 0)
            { 
                int key = _orderlist.Count;
                while(_orderlist.ContainsKey(key)) key++;
                newOrder.Id = key;
            }

            _orderlist[newOrder.Id] = newOrder;

            return newOrder;
        }

在 POSTMAN 中,获取请求成功。

此时获取:api/Order

此时获取:api/Order/id

但是,发布请求返回状态 500。

任何人都可以帮助解决这种情况吗?

【问题讨论】:

    标签: post postman asp.net-core-webapi http-status-code-500


    【解决方案1】:

    我测试了您的代码并重现了您的问题。你可以添加一个无参数的构造函数。

    public class Order
    {
        public int Id { get; set; } = 0;
        public string ClientName { get; set; }
        public string Menu { get; set; }
        public int NoOfMenu { get; set; }
    
        public Order(string clientName, string menuName, int noOfMenu)
        {
            ClientName = clientName;
            Menu = menuName;
            NoOfMenu = noOfMenu;
        }
        public Order()
        {
    
        }
    }
    

    【讨论】:

    • 非常感谢。它解决了这个问题。我的构造函数禁用了无参数的,所以我得到了内部服务器错误。似乎模型绑定在反序列化 JSON 时调用了无参数构造函数。
    猜你喜欢
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 2018-06-10
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    • 2020-07-18
    相关资源
    最近更新 更多