TypedResults in Minimal APIs
- Matt
Ich habe an einem Endpunkt lange Results.Ok(todo) und Results.NotFound() gemischt zurückgegeben, weil beides anstandslos kompiliert - beide liefern nur IResult. Die OpenAPI-Beschreibung blieb dabei leer, solange ich nicht zusätzlich .Produces<Todo>() angehängt habe. Genau das behebt TypedResults: TypedResults.Ok(todo) liefert den konkreten Typ Ok<Todo> aus dem Namensraum Microsoft.AspNetCore.Http.HttpResults, der sich selbst gegenüber OpenAPI beschreibt, ganz ohne Produces.
Der Haken dabei: Ein Handler, der je nach Fall Ok<Todo> oder NotFound liefert, muss das in der Signatur als Results<Ok<Todo>, NotFound> angeben - der Compiler leitet den Rückgabetyp anders als bei Results nicht mehr selbst her, eine einfache Ok-oder-NotFound-Mischung ohne diese Angabe kompiliert nicht. Dafür lässt sich in Tests ohne Cast direkt Assert.IsType<Ok<Todo>>(result) prüfen. Mehr Tipparbeit an der Signatur, dafür weniger Kandidaten fuer Laufzeitfehler.
Details dazu in der Dokumentation zu Minimal-API-Antworten. Wie ich zwei Jahre nach Einführung der Minimal APIs geschrieben habe, war TypedResults damals schon da - konsequent genutzt habe ich es erst jetzt.