Quali sono le differenze fondamentali di tali funzioni? Tutto quello che so sono tutti e tre i risultati in un 201, che è appropriato per una richiesta POST di successo.API POST per ASP.net Core RC2 Web - Quando utilizzare Create, CreatedAtAction, vs. CreatedAtRoute?
Seguo solo esempi che vedo online, ma non spiegano veramente perché stanno facendo quello che stanno facendo.
Dovremmo fornire un nome per il nostro GET (1 informazione da id):
[HttpGet("{id}", Name="MyStuff")]
public async Task<IActionResult> GetAsync(int id)
{
return new ObjectResult(new MyStuff(id));
}
Qual è lo scopo di nominare questo ottenere la funzione, oltre che è "probabilmente" necessario per la funzione POST qui di seguito:
[HttpPost]
public async Task<IActionResult> PostAsync([FromBody]MyStuff myStuff)
{
// actual insertion code left out
return CreatedAtRoute("MyStuff", new { id = myStuff.Id }, myStuff);
}
noto che CreatedAtRoute
ha anche un sovraccarico che non prende in nome della rotta.
C'è anche CreatedAtAction
che accetta parametri simili. Perché esiste questa variante?
C'è anche Created
che si aspetta un URL e l'oggetto che vogliamo restituire. Posso semplicemente usare questa variante e fornire un URL fasullo e restituire l'oggetto che voglio e farlo finire e finirlo?
Non sono sicuro del motivo per cui ci sono così tante varianti solo per poter restituire un 201 al client. Nella maggior parte dei casi, tutto ciò che voglio fare è restituire l'ID univoco "assegnato dall'app" (molto probabilmente da un database) o una versione della mia entità che ha informazioni minime.
Penso che alla fine, una risposta di 201 "dovrebbe" creare un'intestazione di posizione che abbia l'URL della risorsa appena creata, che credo che tutti e 3 e i loro sovraccarichi finiscano. Perché dovrei sempre restituire un'intestazione di posizione? I miei client JavaScript, le app native per dispositivi mobili e desktop non lo usano mai. Ad esempio, se emetto un POST HTTP, per creare dichiarazioni di fatturazione e inviarle agli utenti, quale sarebbe l'URL di tale posizione? (Le mie scuse per non aver scavato più a fondo nella storia di Internet per trovare una risposta.)
Perché creare nomi per azioni e percorsi? Qual è la differenza tra nomi di azioni e nomi di percorsi?
Sono confuso su questo, quindi ho fatto ricorso a restituire il Ok()
, che restituisce 200, che è inappropriato per POST.
Non sono sicuro di .NET Core, ma esiste ancora il metodo 'Content (HttpStatusCode, T content)' per restituire sia un codice di stato che un contenuto? Questo dovrebbe consentire di restituire 201 insieme all'oggetto appena creato, senza includere l'intestazione 'Location'. –
afrazier
Quel sovraccarico non sembra più esistere, ma c'è in realtà un sovraccarico per StatusCode che è possibile utilizzare in modo simile: 'StatusCode (int httpStatusCode, valore dell'oggetto)' – Sock
Sembra che '[HttpGet (" {id} " , Name = "GetUser", Order = 0)] 'modo di creare un percorso non sembra funzionare con CreatedAtRoute() – Crob