Is ApiController deprecated in .NET Core

Viji picture Viji · Jul 29, 2016 · Viewed 47.3k times · Source

Is it true that "ApiController will get deprecated in .NET Core"? Asking since I'm planning to use it in new projects.

Answer

Henk Mollema picture Henk Mollema · Jul 30, 2016

Update ASP.NET Core 2.1

Since ASP.NET Core 2.1 a new set of types is available to create Web API controllers. You can annotate your controllers with the [ApiController] attribute which enables a few new features such as automatic model state validation and binding source parameter inference. See the docs for more information: https://docs.microsoft.com/en-us/aspnet/core/web-api/index?view=aspnetcore-2.1#annotate-class-with-apicontrollerattribute.


There is indeed no particular ApiController class anymore since MVC and WebAPI have been merged in ASP.NET Core. However, the Controller class of MVC brings in a bunch of features you probably won't need when developing just a Web API, such as a views and model binding.

You've got two options if you want something different:

Use the ControllerBase class in the Microsoft.AspNetCore.Mvc.Core package.

Or

Create your ApiController base class. The key here is to add the [ActionContext] attribute which injects the current ActionContext instance into the property:

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

Also, add the [Controller] attribute to the class to mark it as a controller for the MVC controller discovery.

See more details in my “Web API in MVC 6” blogpost.