是否在.NET Core中弃用了ApiController

时间:2016-07-29 21:02:19

标签: c# asp.net-mvc asp.net-web-api asp.net-core .net-core

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

4 个答案:

答案 0 :(得分:49)

更新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

由于MVC和WebAPI已在ASP.NET Core中合并,因此确实没有特定的ApiController类。但是,Controller类MVC带来了一些在开发Web API时可能不需要的功能,例如视图和模型绑定。

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

使用Microsoft.AspNetCore.Mvc.Core包中的ControllerBase课程。

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

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

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

在我的“Web API in MVC 6” blogpost中查看更多详情。

答案 1 :(得分:13)

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

与属性相结合的功能是:

  • 验证错误会自动触发HTTP 400响应。
  • 不再需要明确定义[FromBody][FromRoute],...属性

指向文档的链接:

<强>更新

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

答案 2 :(得分:10)

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

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

在ASP.NET Core中,这根本就没有必要了。 Controller基类可用于从Razor Views或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);
     }
 }

答案 3 :(得分:4)

正如其他人所提到的,ASP.NET Core是一个全新的webstack,与旧的ASP.NET MVC webstack不兼容。这明确地反映在它的名称和版本中!

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中删除的某些属性。

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