1 messaggio dal 19 luglio 2023
salve a tutti, sono nuovo qui in questo forum e spero mi possiate aiutare, sono alle prime armi con ASP.NET e EF Core.
Tuttavia vi allego l'errore che ricevo dopo che effettuo il post su un CreateOrder attraverso swagger

{
  "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
  "title": "One or more validation errors occurred.",
  "status": 400,
  "traceId": "00-835d978d6640c822b96872721a0e4c3d-d98d329a6de7e9f4-00",
  "errors": {
    "entity": [
      "The entity field is required."
    ],
    "$.customer.orders[0]": [
      "The JSON value could not be converted to Northwind_def.DTO.OrdersDTO. Path: $.customer.orders[0] | LineNumber: 28 | BytePositionInLine: 14."
    ]
  }
}


allego qui di seguito il mio DTO
public class OrdersDTO
    {
        public int OrderID { get; set; }
        public string CustomerID { get; set; }
        public int? EmployeeID { get; set; }
        public DateTime? OrderDate { get; set; }
        public DateTime? RequiredDate { get; set; }
        public DateTime? ShippedDate { get; set; }
        public int? ShipVia { get; set; }
        public decimal? Freight { get; set; }
        public string ShipName { get; set; }
        public string ShipAddress { get; set; }
        public string ShipCity { get; set; }
        public string ShipRegion { get; set; }
        public string ShipPostalCode { get; set; }
        public string ShipCountry { get; set; }

        public virtual CustomersDTO Customer { get; set; }
        public virtual EmployeesDTO Employee { get; set; }
        public virtual ShippersDTO ShipViaNavigation { get; set; }
        public virtual ICollection<OrderDetailsDTO> Order_Details { get; set; } = new HashSet<OrderDetailsDTO>();
    }


vi allego la parte del controller che entra in gioco e la create che viene chiamata
namespace Northwind_def.Controllers
{
    [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
    [Authorize(Roles = UserRoles.Admin)]
    [ApiController]
    [Route("api/[controller]")]
    public class OrdersController : ControllerBase
    {
        //un DTO per ogni API
        private readonly IDaoOrders repoOrder;
        private readonly IMapperConfig mapper;
        private readonly ILogger<OrdersController> _logger;

        public OrdersController(ILogger<OrdersController> logger, 
            IDaoOrders daoOrder, 
            IMapperConfig MapperConfig)
        {
            _logger = logger;
            repoOrder = daoOrder;
            mapper = MapperConfig;
        }

        [HttpGet("GetOrderById")]
        public async Task<ActionResult<OrdersDTO>> GetOrderById(int id)
        {
            var map = mapper.InitializeAutomapper();
            OrdersDTO orderById;
            try
            {
                var e = await repoOrder.Get(id);
                if (e is null)
                {
                    return StatusCode(404, "order not found");
                }
                else
                {
                    orderById = map.Map<OrdersDTO>(e);
                    return StatusCode(200, orderById);
                }
            }
            catch (Exception)
            {
                return BadRequest();
            }
        }

        [HttpGet("GetOrderByCustomerID")]
        public async Task<ActionResult<List<OrdersDTO>>> GetOrdersByCustomerID(string customerID)
        {
            var map = mapper.InitializeAutomapper();
            List<OrdersDTO> ordersByCustomerId;
            try
            {
                var e = await repoOrder.GetOrdersByCustomerID(customerID);
                if (e is null)
                {
                    return StatusCode(404, "row affected: 0");
                }
                else
                {
                    ordersByCustomerId = map.Map<List<OrdersDTO>>(e);
                    return StatusCode(200, ordersByCustomerId);
                }

            }
            catch (Exception)
            {
                return BadRequest();
            }
        }

        [HttpGet("GetOrdersByCity")]
        public async Task<ActionResult<List<OrdersDTO>>> GetOrdersByCity(string city)
        {
            var map = mapper.InitializeAutomapper();
            List<OrdersDTO> orderByCity;
            try
            {
                var e = await repoOrder.GetOrdersByCity(city);
                if (e is null)
                {
                    return StatusCode(404, "row affected: 0");
                }
                else
                {
                    orderByCity = map.Map<List<OrdersDTO>>(e);
                    return StatusCode(200, orderByCity);
                }
            }
            catch (Exception)
            {
                return BadRequest();
            }
        }

        [HttpPost("CreateOrder")]
        public async Task<IActionResult> CreateOrder(OrdersDTO entity)
        {
            var map = mapper.InitializeAutomapper();
            var order = map.Map<Orders>(entity);

            try
            {
                int orderID = await repoOrder.Create(order);
                if (orderID > 0)
                {
                    return Ok(orderID);
                }
                else
                {
                    return StatusCode(422, "failed to create attempt");
                }
            }catch(Exception) 
            {
                return BadRequest();
            }
        }

        [HttpPut("UpdateOrder")]
        public async Task<IActionResult> UpdateOrder(Orders o)
        {
            try
            {
                bool update = await repoOrder.Update(o);
                if (update)
                {
                    return Ok();
                }
                else
                {
                    return StatusCode(422, "failed to update attempt");
                }
            }catch (Exception)
            {
                return BadRequest();
            }
        }

        [HttpDelete("DeleteOrder")]
        public async Task<IActionResult> DeleteOrder(Orders o)
        {
            try
            {
                bool delete = await repoOrder.Delete(o);
                if (delete)
                {
                    return Ok();
                }
                else
                {
                    return StatusCode(422, "failed to delete attempt");
                }
            }
            catch (Exception)
            {
                return BadRequest();
            }
        }
    }
}



namespace DBLayer.DAO.DAOImpl
{
    public class DAOOrdersIm : IDaoOrders
    {
        private readonly NorthwindDefContext context;

        //iniettato per DI 
        public DAOOrdersIm(NorthwindDefContext dbContext)
        {
            context = dbContext;
        }

        public async Task<List<Orders>> GetOrdersByCustomerID(string customerID)
        {
            var orders = await context.Orders
                        .Join(context.Customers, o => o.CustomerID, c => c.CustomerID, (o, c) => o)
                        .Where(o => o.CustomerID == customerID)
                        .ToListAsync();

            return orders;
        }

        public async Task<List<Orders>> GetOrdersByCity(string city)
        {
            var orders = await context.Orders
                        .Join(context.Customers, o => o.CustomerID, c => c.CustomerID, (o, c) => new { Order = o, Customer = c })
                        .Where(x => x.Customer.City == city)
                        .Select(x => x.Order)
                        .ToListAsync();

            return orders;
        }

        public async Task<int> Create(Orders entity)
        {
            int id = -1;

            context.Orders.Add(entity);
            if (await context.SaveChangesAsync() > 0) //restituisce il #(righe) modificate
            {
                id = entity.OrderID;
            }

            return id;
        }

        public async Task<Orders> Get(int id)
        {
            Orders? order = await context.Orders.Where(e => e.OrderID == id)
                .FirstOrDefaultAsync(e => e.OrderID == id);

            return order;
        }

        public async Task<bool> Update(Orders o)
        {
            Boolean update;
            int rowsAffected = 0;

            //ricerco il recod da aggiornare...
            var order = await context.Orders.FindAsync(o.OrderID);

            if (order != null)
            {
                order.OrderID = o.OrderID;
                order.CustomerID = o.CustomerID;
                order.EmployeeID = o.EmployeeID;
                order.OrderDate = o.OrderDate;
                order.RequiredDate = o.RequiredDate;
                order.ShippedDate = o.ShippedDate;
                order.ShipVia = o.ShipVia;
                order.Freight = o.Freight;
                order.ShipName = o.ShipName;
                order.ShipAddress = o.ShipAddress;
                order.ShipCity = o.ShipCity;
                order.ShipRegion = o.ShipRegion;
                order.ShipPostalCode = o.ShipPostalCode;
                order.ShipCountry = o.ShipCountry;
                order.ShipName = o.ShipName;
                order.ShipCity = o.ShipCity;

                rowsAffected = await context.SaveChangesAsync();
            }

            if (rowsAffected > 0) { update = true; }
            else { update = false; }

            return update;
        }

        public async Task<bool> Delete(Orders o)
        {
            Boolean update;
            int rowsAffected = 0;

            var order = await context.Orders.FindAsync(o.OrderID);

            if (order != null)
            {
                context.Orders.Remove(order);

                rowsAffected = await context.SaveChangesAsync();
            }

            if (rowsAffected > 0) { update = true; }
            else { update = false; }

            return update;
        }
    }
}


vi ringrazio anticipatamente<3

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.