Se posso saltare direttamente in esso.
Ho un endpoint web api dove passo in una collezione e funziona in modo sorprendente ma con un avvertimento.
Se un oggetto in quella raccolta contiene dati non validi (dati mancanti mancanti) restituisce una richiesta errata, annullando quindi l'intera collezione - i normali shenanigans ma il lead tecnologico suggerito consente ai buoni di venire attraverso ma restituiscono i dettagli della "cattiva" uno "- beh in termini di richieste http, questo è impossibile, non è possibile inviare contemporaneamente Ok
e BadRequest
...
Ho scelto di passare in raccolte per risparmiare sulla risorsa piuttosto che colpire l'api più volte per ogni ordine.
Quello che ho fatto è sottrarre gli ordini "buoni" e passare quelli ad un'altra API, che poi restituisce 200 -
ora sto deliberando su cosa fare con i malformati - manda un messaggio nel 200 con quelli malformati? o inviare per e-mail al cliente gli ordini non andati a buon fine ... un bel problema da avere. Qualche consiglio?
[HttpPost]
[Route("orders")]
[DocMethod(Verb = "POST",
Description = "Inserts a complete collection of order objects (Inclusive of related objects)",
EndPoint = "/api/v1/orders",
Version = "V1")]
public async Task<IHttpActionResult> Post([FromBody]List<Order> orders)
{
var validatedOrders = FilterOrders.Validated(orders);
if (orders == null && validatedOrders == null)
return BadRequest("Unusable resources.");
try
{
var identity = User.Identity as ClaimsIdentity;
var identityModel = IdentityModel.Create(identity);
if (identityModel == null)
return StatusCode(HttpStatusCode.Forbidden);
var response = await _orderService.AddAsync(validatedOrders, identityModel);
return new DataAPIResult(response.Content.ReadAsStringAsync().Result, response);
}
catch (System.Exception ex)
{
return InternalServerError();
}
}
Quindi tecnicamente non ho un errore di codice (quindi postare qui) ma più semplicemente un processo di ingegneria. Qualsiasi consiglio molto apprezzato.