ASP.net Core RC2-Web-API-POST - Wann wird Create, CreatedAtAction im Vergleich zu CreatedAtRoute verwendet?

Was sind die grundlegenden Unterschiede dieser Funktionen? Alles, was ich weiß, ist, dass alle drei zu einem 201 führen, was für eine erfolgreiche POST-Anfrage angemessen ist.

Ich folge nur Beispielen, die ich online sehe, aber sie erklären nicht wirklich, warum sie das tun, was sie tun.

Wir sollen einen Namen für unser GET angeben (1 Datensatz nach ID):

[HttpGet("{id}", Name="MyStuff")]
public async Task<IActionResult> GetAsync(int id)
{
     return new ObjectResult(new MyStuff(id));
}

Was ist der Zweck der Benennung dieser get-Funktion, abgesehen davon, dass sie "wahrscheinlich" für die unten stehende POST-Funktion erforderlich ist:

[HttpPost]
public async Task<IActionResult> PostAsync([FromBody]MyStuff myStuff)
{
     // actual insertion code left out

     return CreatedAtRoute("MyStuff", new { id = myStuff.Id }, myStuff);
}

Ich bemerke, dassCreatedAtRoute hat auch eine Überladung, die den Routennamen nicht aufnimmt.

Es gibt auchCreatedAtAction das nimmt in ähnlichen Parametern. Warum gibt es diese Variante?

Es gibt auchCreated erwartet eine URL und das Objekt, das wir zurückgeben möchten. Kann ich diese Variante einfach verwenden und eine gefälschte URL bereitstellen und das gewünschte Objekt zurückgeben und fertig machen?

Ich bin mir nicht sicher, warum es so viele Varianten gibt, nur um eine 201 an den Client zurückgeben zu können. In den meisten Fällen möchte ich nur die "App-zugewiesene" (höchstwahrscheinlich aus einer Datenbank stammende) eindeutige ID oder eine Version meiner Entität mit minimalen Informationen zurückgeben.

Ich denke, dass eine 201-Antwort letztendlich einen Standortheader erstellen sollte, der die URL der neu erstellten Ressource enthält, was meiner Meinung nach alle 3 und ihre Überladungen letztendlich bewirken. Warum sollte ich immer einen Standortheader zurückgeben? Meine JavaScript-Clients, nativen Mobil- und Desktop-Apps verwenden sie niemals. Wenn ich beispielsweise einen HTTP-POST ausstelle, um Abrechnungen zu erstellen und diese an Benutzer zu senden, wie würde eine solche Standort-URL lauten? (Ich entschuldige mich dafür, dass ich nicht tiefer in die Geschichte des Internets eingegangen bin, um eine Antwort darauf zu finden.)

Warum Namen für Aktionen und Routen erstellen? Was ist der Unterschied zwischen Aktionsnamen und Routennamen?

Ich bin diesbezüglich verwirrt, also habe ich auf die Rücksendung des @ zurückgegriffeOk(), das 200 zurückgibt, was für POST ungeeignet ist.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage