首页 > 解决方案 > 向 Asp.Net Core Web Api(版本 3.1)发送 POST 请求时,我从 POSTMAN 获得状态 500 代码

问题描述

我被 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 中,获取请求成功。

这是 Get: api/Order 获取请求

这是获取时:api/Order/id 用身份证获取

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

有人可以帮助解决这种情况吗?

标签: postpostmanasp.net-core-webapihttp-status-code-500

解决方案


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

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()
    {

    }
}

推荐阅读