ASP.NET Core 2 WEB API - 依赖注入
ASP.NET Core 2 WEB API - Dependency Injection
当使用 WEB API(仅)时,API 控制器和普通 Web 控制器有区别吗?我的意思是当使用生命周期之一添加这样的服务时:
services.AddSingleton<IService, Service();
services.AddScoped<IService, Service();
services.AddTransient<IService, Service();
returns 网页控制器中的服务与 returns JSON REST 无状态控制器中的服务行为是否会有所不同?
是的,在 ASP.NET Core 之前,应用程序分为 ASP.NET MVC 和 ASP.NET Web API。
ASP.NET 核心已经改变了这一点。现在,这是一种用于处理请求的通用 MVC 方法(由 MVC 中间件表示),无论它们最终是 returning 数据还是视图。
生命周期不受影响,因为 "same" 管道实现针对所有请求执行。
例如,您可以创建定义为 return 动态响应数据的控制器操作:
[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();
}
所以取决于查询参数,它会returnJSON数据,只有状态码作为响应,或者View。在控制器实例创建期间(当某些依赖项可能通过 DI 解决时)框架还不知道将使用什么流程。
当使用 WEB API(仅)时,API 控制器和普通 Web 控制器有区别吗?我的意思是当使用生命周期之一添加这样的服务时:
services.AddSingleton<IService, Service();
services.AddScoped<IService, Service();
services.AddTransient<IService, Service();
returns 网页控制器中的服务与 returns JSON REST 无状态控制器中的服务行为是否会有所不同?
是的,在 ASP.NET Core 之前,应用程序分为 ASP.NET MVC 和 ASP.NET Web API。
ASP.NET 核心已经改变了这一点。现在,这是一种用于处理请求的通用 MVC 方法(由 MVC 中间件表示),无论它们最终是 returning 数据还是视图。
生命周期不受影响,因为 "same" 管道实现针对所有请求执行。
例如,您可以创建定义为 return 动态响应数据的控制器操作:
[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();
}
所以取决于查询参数,它会returnJSON数据,只有状态码作为响应,或者View。在控制器实例创建期间(当某些依赖项可能通过 DI 解决时)框架还不知道将使用什么流程。