2016-07-29 103 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