Подтвердить что ты не робот

Является ли ApiController устаревшим в .NET Core

Правда ли, что "ApiController устареет в .NET Core"? Спрашиваю, так как я планирую использовать его в новых проектах.

4b9b3361

Ответ 1

Обновление ASP.NET Core 2.1

Начиная с ASP.NET Core 2.1 доступен новый набор типов для создания контроллеров Web API. Вы можете аннотировать свои контроллеры с помощью атрибута [ApiController], который включает несколько новых функций, таких как автоматическая проверка состояния модели и вывод параметров источника привязки. Смотрите документы для получения дополнительной информации:   https://docs.microsoft.com/en-us/aspnet/core/web-api/index?view=aspnetcore-2.1#annotate-class-with-apicontrollerattribute.


Действительно, больше нет конкретного класса ApiController, так как MVC и WebAPI были объединены в ASP.NET Core. Тем не менее, класс Controller MVC предоставляет множество функций, которые вам, вероятно, не понадобятся при разработке только веб-API, таких как привязки видов и моделей.

У вас есть два варианта, если вы хотите что-то другое:

Используйте класс ControllerBase в пакете Microsoft.AspNetCore.Mvc.Core.

Или

Создайте свой базовый класс ApiController. Ключевым моментом здесь является добавление атрибута [ActionContext], который внедряет текущий экземпляр ActionContext в свойство:

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

Также добавьте атрибут [Controller] в класс, чтобы пометить его как контроллер для обнаружения контроллера MVC.

Подробности читайте в моем блоге "Web API в MVC 6".

Ответ 2

Атрибут [ApiController] фактически был добавлен обратно в ASP.NET Core версии 2.1.

Функции, связанные с атрибутом:

  • Ошибки проверки автоматически вызывают ответ HTTP 400.
  • Больше нет необходимости явно определять атрибуты [FromBody], [FromRoute],...

Ссылки на документы:

Обновление

Существует также базовый класс ControllerBase для контроллеров, который наследуется, который подходит для API-контроллеров, потому что он пропускает все функции, связанные с представлением.

Ответ 3

В ядре ASP.NET используются термины и понятия, известные из ASP.NET MVC и ASP.NET WepAPI. Но в основном это совершенно новая структура. Поэтому есть несколько понятий или базовых классов, которые мы можем просто забыть.

ASP.NET MVC и ASP.NET WebApi - это две сосуществующие, но разные структуры, поэтому необходимо указать, какой контроллер следует использовать в качестве контроллера WebApi, используя ApiController как базовый класс.

В ASP.NET Core это просто не нужно больше. Базовый класс Controller может использоваться для действий, которые возвращают HTML из Razor Views или JSON (с форматами выходных форматов также возможны XML и другие форматы). Вам даже не нужен базовый класс Controller. Можно даже использовать "Обычный объект С#" как контроллер без наследования. Это пример демонстрационного контроллера, который показывает, что даже если ApiController не существует, структурный подход к доставке данных клиенту аналогичен.

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

Ответ 4

Как уже упоминалось, ASP.NET Core - это совершенно новый веб-стол, который несовместим со старым веб-сайтом ASP.NET MVC. Это явно отражено в названии и версии!

ASP.NET Core и ASP.NET Core MVC имеют версию 1.0.0, чтобы сделать эту несовместимость максимально понятной.

ASP.NET Core объединил MVC и WebApi в один только что названный Api.

И вот то, что вы, возможно, искали:

Если вы переходите из предыдущего приложения ASP.NET MVC или ASP.NET WebApi, вам может понадобиться импортировать пакет Microsoft.AspNetCore.Mvc.WebApiCompatShim, который предоставляет некоторые типы совместимости, что облегчает миграцию из предыдущего версии. Среди них класс ApiController и некоторые атрибуты, которые были удалены в новом webstack Api.

Однако учтите, что это только для того, чтобы помочь вам в переносе существующих приложений. Когда вы создаете новое приложение, вы не должны использовать эту совместимость и просто использовать новый материал.