2016-07-29 101 views
18

确实,在“.NET Core”中将会使用“ApiController”吗?我真的需要这方面的专业见解。因为我打算在新项目中使用它。在.NET Core中是不赞成使用ApiController

+6

简答:是的。不是那么简短的答案:Asp.Net MVC和Asp.Net Web API被合并为一个在asp.net-core中的代码库。所以它们都从'Controller'继承,并且都可以返回'IActionResult'的实现。无论是MVC的“视图”还是Web API的Json。您可以根据需要配置核心。 https://docs.asp.net/en/latest/intro.html – Nkosi

回答

21

因为MVC和WebAPI已经在ASP.NET Core中合并了,所以确实对于特定的ApiController类。但是,MVC的Controller类引入了一些功能,您在开发Web API时可能不需要这些功能,例如视图和模型绑定。

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

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

或者

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

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

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

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

+0

它真的有帮助... – Viji

+0

这实际上正是WebApi兼容性的'ApiController' Shim Package ,它只是绑定更多的属性,但它们都基于ControlerContext,它通过属性https://github.com/aspnet/Mvc/blob/dev/src/Microsoft.AspNetCore.Mvc.WebApiCompatShim/ApiController.cs#L36-L43注入。与更多的兼容性东西(这是完全可选的),如路线注册https://github.com/aspnet/Mvc/blob/dev/src/Microsoft.AspNetCore.Mvc.WebApiCompatShim/Routing/WebApiCompatShimRouteBuilderExtensions.cs#L13或WebApi2 esque属性 – Tseng

8

在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”作为控制器而不需要继承。 这是一个演示控制器的概要示例,即使ApiController不在那里,将数据传递到客户端的结构方法也是类似的。

public class DemoController : Controller 
{  
    public async Task<IActionResult> Action() 
    { 
     var model = await _someService.GetPreciousData(); 
     return Ok(model); 
    } 
} 
+0

感谢您的洞察 – Viji

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

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

+0

感谢您的迁移提示 – Viji