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