“ApiController
在.NET Core中将弃用”的说法是否正确?问,因为我打算在新项目中使用它。
Answers:
更新ASP.NET Core 2.1
从ASP.NET Core 2.1开始,可以使用一组新的类型来创建Web API控制器。您可以使用[ApiController]
属性注释控制器,该属性启用一些新功能,例如自动模型状态验证和绑定源参数推断。有关更多信息,请参阅文档:https : //docs.microsoft.com/zh-cn/aspnet/core/web-api/index?view= aspnetcore-2.1#annotate-class-with-
apicontrollerattribute。
实际上ApiController
,由于MVC和WebAPI已合并到ASP.NET Core中,因此确实不再存在特定的类。但是,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控制器发现的控制器。
在我的“ MVC 6中的Web API”博客中查看更多详细信息。
ApiController
WebApi兼容性Shim Package所做的,它只是绑定了更多属性,但它们都基于通过属性github.com/aspnet/Mvc/blob/dev/src/注入的ControlerContext,但是具有更多的兼容性((完全可选),例如路由注册github.com/aspnet/Mvc/blob/dev/src/…或WebApi2 esque属性
ApiControllerAttribute
。如果您可以更新答案,那就太好了,因为这是公认的答案:)
该[ApiController]
属性实际上是在ASP.NET Core 2.1版中重新添加的。
与属性结合的功能包括:
[FromBody]
,[FromRoute]
......明确属性链接到文档:
更新资料
还有一个ControllerBase
控制器可以继承的基类,它适合api控制器,因为它忽略了所有与视图相关的功能。
在ASP.NET核心中,使用ASP.NET MVC和ASP.NET WepAPI已知的术语和概念。但基本上,这是一个全新的框架。因此,我们可以简单地忘记几个概念或基类。
ASP.NET MVC和ASP.NET WebApi是两个并存但不同的框架,因此必须确定使用ApiController
as基类将控制器指定为WebApi控制器。
在ASP.NET Core中,根本不再需要这样做。的Controller
基类可以用于从剃刀浏览或JSON返回HTML动作(与输出格式化XML和其他格式也是可能的)。您甚至不需要Controller
基类。甚至可以在不继承的情况下使用“普通C#对象”作为控制器。这是一个演示控制器的示例,即使不存在ApiController,将数据传递到客户端的结构方法也是相似的。
public class DemoController : Controller
{
public async Task<IActionResult> Action()
{
var model = await _someService.GetPreciousData();
return Ok(model);
}
}
就像其他人提到的那样,ASP.NET Core是一个全新的Web堆栈,与旧的ASP.NET MVC Web堆栈不兼容。这明确体现在名称和版本中!
ASP.NET Core和ASP.NET Core MVC具有版本1.0.0,以使这种不兼容性非常清楚。
ASP.NET Core将MVC和WebApi合并为一个单一的Api(称为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中已消失。
Controller
并且都可以返回的实现IActionResult
。无论是View
MVC还是Json
Web API。您可以根据需要配置核心。docs.asp.net/en/latest/intro.html