Search code examples
c#asp.net-mvcasp.net-web-apiasp.net-core.net-core

Is ApiController deprecated in .NET Core


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


Solution

  • 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://learn.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.