wake-up-neo.com

Ist ApiController in .NET Core veraltet?

Stimmt es, dass "ApiController in .NET Core veraltet sein wird"? Fragen, da ich plane, es in neuen Projekten zu verwenden.

40
Viji

Aktualisieren Sie ASP.NET Core 2.1

Seit ASP.NET Core 2.1 stehen neue Typen zum Erstellen von Web-API-Controllern zur Verfügung. Sie können Ihre Controller mit dem [ApiController] -Attribut, das einige neue Funktionen wie die automatische Modellstatusüberprüfung und den Rückschluss auf Bindungsquellenparameter ermöglicht. Weitere Informationen finden Sie in den Dokumenten: https://docs.Microsoft.com/en-us/aspnet/core/web-api/index?view=aspnetcore-2.1#annotate-class-with-apicontrollerattribute =.


Es gibt in der Tat keine bestimmte ApiController -Klasse mehr, da MVC und WebAPI in ASP.NET Core zusammengeführt wurden. Die Klasse Controller von MVC bringt jedoch eine Reihe von Funktionen mit sich, die Sie wahrscheinlich nicht benötigen, wenn Sie nur eine Web-API entwickeln, z. B. Ansichten und Modellbindungen.

Sie haben zwei Möglichkeiten, wenn Sie etwas anderes wollen:

Verwenden Sie die Klasse ControllerBase im Paket Microsoft.AspNetCore.Mvc.Core .

oder

Erstellen Sie Ihre Basisklasse ApiController. Der Schlüssel hier ist das Hinzufügen des [ActionContext] Attribut, das die aktuelle ActionContext Instanz in die Eigenschaft einfügt:

[Controller]
public abstract class ApiController
{
    [ActionContext]
    public ActionContext ActionContext { get; set; }
}

Fügen Sie außerdem das [Controller]-Attribut für die Klasse, um sie als Controller für die MVC-Controllerermittlung zu kennzeichnen.

Weitere Informationen finden Sie in meinem "Web-API in MVC 6" -Blogpost .

55
Henk Mollema

Das Attribut [ApiController] Wurde bereits in ASP.NET Core Version 2.1 hinzugefügt.

Mit dem Attribut verbundene Funktionen sind:

  • Validierungsfehler lösen automatisch eine HTTP 400-Antwort aus.
  • Es ist nicht mehr erforderlich, die Attribute [FromBody], [FromRoute], ... explizit zu definieren

Links zu den Dokumenten:

Update

Es gibt auch die Basisklasse ControllerBase, von der Controller erben können. Diese eignet sich für API-Controller, da alle mit der Ansicht zusammenhängenden Funktionen wegfallen.

15
Riscie

In ASP.NET Core werden Begriffe und Konzepte verwendet, die aus ASP.NET MVC und ASP.NET WepAPI bekannt sind. Aber im Grunde ist es ein komplett neues Framework. Daher gibt es verschiedene Konzepte oder Basisklassen, die wir einfach vergessen können.

ASP.NET MVC und ASP.NET WebApi sind zwei koexistierende, aber unterschiedliche Frameworks. Daher muss eine Bestimmung getroffen werden, um einen Controller als WebApi-Controller anzugeben, indem ApiController als Basisklasse verwendet wird.

In ASP.NET Core ist dies einfach nicht mehr erforderlich. Die Basisklasse Controller kann für Aktionen verwendet werden, die HTML aus Razor Views oder JSON zurückgeben (mit Ausgabeformatierern sind auch XML und andere Formate möglich). Sie brauchen nicht einmal die Basisklasse Controller. Es ist sogar möglich, ein "Plain Old C # Object" als Controller ohne Vererbung zu verwenden. Dies ist ein Beispiel für einen Demo-Controller, um zu verdeutlichen, dass der strukturelle Ansatz zum Liefern von Daten an den Client ähnlich ist, obwohl der ApiController nicht vorhanden ist.

public class DemoController : Controller
{       
     public async Task<IActionResult> Action()
     {
         var model = await _someService.GetPreciousData();
         return Ok(model);
     }
 }
10
Ralf Bönning

Wie bereits erwähnt, ist ASP.NET Core ein vollständig neuer Webstack, der nicht mit dem alten ASP.NET MVC-Webstack kompatibel ist. Dies spiegelt sich ausdrücklich in Name und Versionierung wider!

ASP.NET Core und ASP.NET Core MVC haben die Version 1.0.0, um diese Inkompatibilität deutlich zu machen.

ASP.NET Core hat MVC und WebApi zu einer einzigen soeben aufgerufenen API zusammengeführt.

Und hier ist das, wonach Sie vielleicht gesucht haben:

If Sie migrieren von einer früheren ASP.NET MVC- oder ASP.NET WebApi-Anwendung. Möglicherweise möchten Sie Microsoft.AspNetCore.Mvc.WebApiCompatShim Paket, das einige Kompatibilitätstypen bietet, die Migrationen von früheren Versionen erleichtern. Darunter befinden sich die Klasse ApiController und bestimmte Attribute, die in der neuen Webstack-API entfernt wurden.

Beachten Sie jedoch, dass dies nur dazu dient, vorhandene Anwendungen zu migrieren. Wenn Sie eine neue Anwendung erstellen, sollten Sie dieses Kompatibilitäts-Shim nicht verwenden und nur das neue Material verwenden.

4
Tseng