ASP.NET Core 2 WEB API - внедрение зависимостей
При использовании WEB API (только) есть ли разница между API-контроллером и обычным веб-контроллером? Я имею в виду, когда добавляю такой сервис, используя один из вариантов жизни:
services.AddSingleton<IService, Service();
services.AddScoped<IService, Service();
services.AddTransient<IService, Service();
будет ли поведение различий между службами в контроллере, который возвращает веб-страницу, или в контроллере, который возвращает JSON, поскольку REST не имеет состояния?
1 ответ
Да, до ASP.NET Core приложения были разделены между ASP.NET MVC и ASP.NET Web API.
ASP.NET Core изменил это. Теперь это один общий подход MVC (представленный промежуточным программным обеспечением MVC) для обработки запросов, независимо от того, возвращают ли они данные или представления.
На жизненный цикл это не влияет, так как "одна и та же" конвейерная реализация выполняется для всех запросов.
Например, вы можете создать действие контроллера, определенное для возврата данных динамического ответа:
[HttpGet]
public dynamic Index(int flag)
{
if (flag == 1) return new StatusCodeResult(200);
if (flag == 2) return new { id = 1, Name = "some text" };
else return View();
}
Таким образом, зависит от параметра запроса, он будет возвращать данные JSON, только код состояния в качестве ответа или View. И во время создания экземпляра контроллера (когда некоторые зависимости могут быть разрешены через DI), среда еще не знает, какой поток будет использоваться.