2016-07-29 6 views
18

ApiControllerは.NETコアで非推奨になります。私は本当にこれに関する専門的な洞察力が必要です。私は新しいプロジェクトでそれを使うつもりだから。.NETコアでApiControllerが推奨されない

+6

短答:はい。それほど短い答えではありません:Asp.Net MVCとAsp.Net Web APIは、asp.net-coreの1つのコードベースに統合されました。したがって、それらはすべて 'Controller'から継承し、' IActionResult'の実装をすべて返すことができます。 MVCの場合は 'View'、web APIの場合は' Json'です。必要なものに基づいてコアを構成します。 https://docs.asp.net/en/latest/intro.html – Nkosi

答えて

21

MVCとWebAPIがASP.NETコアでマージされているので、実際には特定のApiControllerクラスが存在します。しかし、MVCのControllerクラスでは、ビューやモデルバインディングなど、Web APIだけを開発する場合には必要のない機能が多数用意されています。

あなたが別の何かをしたい場合には、2つのオプションを持っている:

Microsoft.AspNetCore.Mvc.CoreパッケージにControllerBaseクラスを使用します。

それとも

あなたApiController基本クラスを作成します。また、

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

MVCコントローラの発見のためのコントローラとしてそれをマークするためにクラスに[Controller]属性を追加します。ここで重要なのは、プロパティに現在のActionContextインスタンスを注入[ActionContext]属性を追加することです。

詳細は“Web API in MVC 6” blogpostを参照してください。

+0

ありがとうございました。 – Viji

+0

実際には、WebApi互換シムパッケージの「ApiControllerより多くのプロパティをバインドするだけですが、それらはすべて、プロパティhttps://github.com/aspnet/Mvc/blob/dev/src/Microsoft.AspNetCore.Mvc.WebApiCompatShim/ApiController.cs#L36-L43を介して注入されたControlerContextをベースにしていますが、ルート登録のような互換性の高いもの(完全にオプションです)が付属しています。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コアではこれはもう必要ありません。 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コアとASP.NETコアMVCは、この非互換性を非常に明確にするためにバージョン1.0.0を使用しています。

ASP.NET Coreは、MVCとWebApiを1つの単一のApiにマージしました。

そして、ここであなたが探しているかもしれことだ:

以前のASP.NET MVCやASP.NET WEBAPIアプリケーションから移行する場合、あなたには、いくつかを提供Microsoft.AspNetCore.Mvc.WebApiCompatShimパッケージをインポートすることもできます以前のバージョンからの移行を容易にする互換性の種類。その中には、ApiControllerクラスと新しいWebstack Apiで削除された特定の属性があります。

ただし、これは既存のアプリケーションの移行に役立つだけのことです。新しいアプリケーションを作成するときは、この互換性シムを使用して新しいものを使用しないでください。

+0

マイグレーションのヒント – Viji

関連する問題