是吗,“ApiController
将在.NET Core中被弃用”?我真的需要专业的见解。因为我打算在新项目中使用它。
答案 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版。
与属性相结合的功能是:
[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中删除的某些属性。
但请注意,这仅用于帮助您迁移现有应用程序。当您创建一个新的应用程序时,您不应该使用此兼容性垫片并只使用新的东西。