.NET Core 中是否弃用了 ApiController
Is ApiController deprecated in .NET Core
“ApiController
将在 .NET Core 中弃用”是真的吗?询问,因为我打算在新项目中使用它。
在 ASP.NET 中,核心使用 ASP.NET MVC 和 ASP.NET WepAPI 中已知的术语和概念。但基本上它是一个全新的框架。因此,我们可以简单地忘记几个概念或基础 classes。
ASP.NET MVC 和 ASP.NET WebApi 是两个共存但不同的框架,因此必须通过使用 ApiController
作为基础来指定控制器作为 WebApi 控制器class.
在 ASP.NET Core 中,这根本没有必要了。 Controller
基础 class 可用于 return HTML 来自 Razor Views 或 JSON 的操作(使用输出格式化程序 XML 和其他格式也可以)。您甚至不需要 Controller
基础 class。甚至可以在没有继承的情况下将“普通旧 C# 对象”用作 Controller
。
下面是要概述的演示控制器示例,即使 ApiController
不存在,向客户端传递数据的结构方法也是相似的。
public class DemoController : Controller
{
public async Task<IActionResult> Action()
{
var model = await _someService.GetPreciousData();
return Ok(model);
}
}
正如其他人所提到的,ASP.NET Core 是一个全新的 webstack,它与旧的 ASP.NET MVC webstack 不兼容。这明确反映在它的名称和版本中!
ASP.NET Core 和 ASP.NET Core MVC 的版本为 1.0.0,这使得这种不兼容性非常明显。
ASP.NET 核心将 MVC 和 WebApi 合并为一个 Api 刚刚调用。
这就是您可能一直在寻找的东西:
如果 您是从以前的 ASP.NET MVC 或 ASP.NET WebApi 应用程序迁移,您可能需要导入 Microsoft.AspNetCore.Mvc.WebApiCompatShim
包,它提供了一些兼容性类型,使从以前的版本迁移更容易。其中包括 ApiController
class 和在新 webstack Api 中删除的某些属性。
但是,请注意,这仅用于帮助您迁移现有应用程序。当你创建一个新的应用程序时,你不应该使用这个兼容性垫片而只使用新的东西。
更新ASP.NET核心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
class 因为 MVC 和 WebAPI 已经合并到 ASP.NET 核心。但是,MVC 的 Controller
class 带来了一堆您在仅开发 Web API 时可能不需要的功能,例如视图和模型绑定。
如果您想要不同的东西,您有两个选择:
使用 Microsoft.AspNetCore.Mvc.Core 包中的 ControllerBase
class。
或
创建您的 ApiController
基地 class。这里的关键是添加 [ActionContext]
属性,该属性将当前 ActionContext
实例注入 属性:
[Controller]
public abstract class ApiController
{
[ActionContext]
public ActionContext ActionContext { get; set; }
}
此外,将 [Controller]
属性添加到 class 以将其标记为 MVC 控制器发现的控制器。
在我的 “Web API in MVC 6” blogpost 中查看更多详细信息。
[ApiController]
属性实际上已在 ASP.NET 核心版本 2.1 中重新添加。
与属性相结合的特征是:
- 验证错误会自动触发 HTTP 400 响应。
- 不再需要明确定义
[FromBody]
、[FromRoute]
、...属性
文档链接:
- https://docs.microsoft.com/en-us/aspnet/core/aspnetcore-2.1?view=aspnetcore-2.1#apicontroller-actionresult
- https://docs.microsoft.com/en-us/aspnet/core/web-api/index?view=aspnetcore-2.1#annotate-class-with-apicontrollerattribute
更新
还有基类 ControllerBase
供控制器继承,适用于 api 控制器,因为它省略了所有与视图相关的功能。
“ApiController
将在 .NET Core 中弃用”是真的吗?询问,因为我打算在新项目中使用它。
在 ASP.NET 中,核心使用 ASP.NET MVC 和 ASP.NET WepAPI 中已知的术语和概念。但基本上它是一个全新的框架。因此,我们可以简单地忘记几个概念或基础 classes。
ASP.NET MVC 和 ASP.NET WebApi 是两个共存但不同的框架,因此必须通过使用 ApiController
作为基础来指定控制器作为 WebApi 控制器class.
在 ASP.NET Core 中,这根本没有必要了。 Controller
基础 class 可用于 return HTML 来自 Razor Views 或 JSON 的操作(使用输出格式化程序 XML 和其他格式也可以)。您甚至不需要 Controller
基础 class。甚至可以在没有继承的情况下将“普通旧 C# 对象”用作 Controller
。
下面是要概述的演示控制器示例,即使 ApiController
不存在,向客户端传递数据的结构方法也是相似的。
public class DemoController : Controller
{
public async Task<IActionResult> Action()
{
var model = await _someService.GetPreciousData();
return Ok(model);
}
}
正如其他人所提到的,ASP.NET Core 是一个全新的 webstack,它与旧的 ASP.NET MVC webstack 不兼容。这明确反映在它的名称和版本中!
ASP.NET Core 和 ASP.NET Core MVC 的版本为 1.0.0,这使得这种不兼容性非常明显。
ASP.NET 核心将 MVC 和 WebApi 合并为一个 Api 刚刚调用。
这就是您可能一直在寻找的东西:
如果 您是从以前的 ASP.NET MVC 或 ASP.NET WebApi 应用程序迁移,您可能需要导入 Microsoft.AspNetCore.Mvc.WebApiCompatShim
包,它提供了一些兼容性类型,使从以前的版本迁移更容易。其中包括 ApiController
class 和在新 webstack Api 中删除的某些属性。
但是,请注意,这仅用于帮助您迁移现有应用程序。当你创建一个新的应用程序时,你不应该使用这个兼容性垫片而只使用新的东西。
更新ASP.NET核心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
class 因为 MVC 和 WebAPI 已经合并到 ASP.NET 核心。但是,MVC 的 Controller
class 带来了一堆您在仅开发 Web API 时可能不需要的功能,例如视图和模型绑定。
如果您想要不同的东西,您有两个选择:
使用 Microsoft.AspNetCore.Mvc.Core 包中的 ControllerBase
class。
或
创建您的 ApiController
基地 class。这里的关键是添加 [ActionContext]
属性,该属性将当前 ActionContext
实例注入 属性:
[Controller]
public abstract class ApiController
{
[ActionContext]
public ActionContext ActionContext { get; set; }
}
此外,将 [Controller]
属性添加到 class 以将其标记为 MVC 控制器发现的控制器。
在我的 “Web API in MVC 6” blogpost 中查看更多详细信息。
[ApiController]
属性实际上已在 ASP.NET 核心版本 2.1 中重新添加。
与属性相结合的特征是:
- 验证错误会自动触发 HTTP 400 响应。
- 不再需要明确定义
[FromBody]
、[FromRoute]
、...属性
文档链接:
- https://docs.microsoft.com/en-us/aspnet/core/aspnetcore-2.1?view=aspnetcore-2.1#apicontroller-actionresult
- https://docs.microsoft.com/en-us/aspnet/core/web-api/index?view=aspnetcore-2.1#annotate-class-with-apicontrollerattribute
更新
还有基类 ControllerBase
供控制器继承,适用于 api 控制器,因为它省略了所有与视图相关的功能。