ApiController是否在.NET Core中被弃用

Vij*_*iji 49 c# asp.net-mvc asp.net-web-api .net-core asp.net-core

这是真的ApiController吗," 会在.NET Core中被弃用"吗?我真的需要专业的见解.因为我打算在新项目中使用它.

Hen*_*ema 66

更新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中合并,因此确实没有特定的类.但是,ControllerMVC类带来了一些在开发Web API时可能不需要的功能,例如视图和模型绑定.

如果你想要不同的东西,你有两个选择:

使用Microsoft.AspNetCore.Mvc.Core包中的ControllerBase类.

要么

创建ApiController基类.这里的关键是添加[ActionContext]将当前ActionContext实例注入属性的属性:

[Controller]
public abstract class ApiController
{
    [ActionContext]
    public ActionContext ActionContext { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

此外,将该[Controller]属性添加到类中以将其标记为MVC控制器发现的控制器.

在我的"MVC 6中的Web API"博文中查看更多详细信息.


Ris*_*cie 21

[ApiController]属性实际上已添加回ASP.NET Core 2.1版.

与属性相结合的功能是:

  • 验证错误会自动触发HTTP 400响应.
  • 没有更多的需要定义[FromBody],[FromRoute]......明确属性

指向文档的链接:

更新

还有一个ControllerBase控制器继承的基类适用于api-controllers,因为它省略了所有与视图相关的功能.

  • 是否有任何资源可以显示* ApiController *和* ControllerBase *之间的比较分析,即一个可以做什么而另一个不能或者何时使用?这真是令人困惑。 (6认同)
  • 本文档告诉您每个项目给您带来的好处(ApiController 属性和 ControllerBase 继承):https://learn.microsoft.com/en-us/aspnet/core/web-api/?view=aspnetcore-2.1#annotate-class -with-apicontroller 属性 (2认同)

Ral*_*ing 10

在ASP.NET中,核心使用ASP.NET MVC和ASP.NET WepAPI中已知的术语和概念.但基本上它是一个完整的新框架.因此,我们可以简单地忘记几个概念或基类.

ASP.NET MVC和ASP.NET WebApi是两个共存但不同的框架,因此必须通过使用ApiControlleras基类将控制器指定为WebApi控制器.

在ASP.NET Core中,这根本就没有必要了.的Controller基类可以用于从剃刀浏览或JSON返回HTML(与输出格式化XML和其他格式也是可能的)的操作.你甚至不需要Controller基类.甚至可以使用"Plain Old C#Object"作为Controller而不具有继承性.这是一个演示控制器的示例,即使ApiController不在那里,向客户端传递数据的结构方法也是类似的.

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

  • 当我读到你的 Demo-Controller 是一个没有 Controller 继承的 POC 然后在你的代码中你从 Controller 继承时,我笑了 - 我确定是一个错字:) (5认同)

Tse*_*eng 6

正如其他人提到的,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 中删除的类和某些属性。

但是,请注意,这只是为了帮助您迁移现有应用程序。当你创建一个新的应用程序时,你不应该使用这个兼容性垫片,而应该使用新的东西。

  • 请注意,“Microsoft.AspNetCore.Mvc.WebApiCompatShim”仅适用于 ASP.NET Core 2.x - 它在 3.x 中已消失。 (2认同)