web-dev-qa-db-ja.com

ApiControllerは.NET Coreで非推奨です

ApiControllerは.NET Coreで非推奨になる」というのは本当ですか?新しいプロジェクトで使用することを計画しているので、尋ねます。

40
Viji

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クラスは実際にはありません。ただし、MVCのControllerクラスには、ビューやモデルバインディングなど、Web APIのみを開発する場合におそらく必要としない機能が多数含まれています。

異なるものが必要な場合は、2つのオプションがあります。

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」ブログ投稿 を参照してください。

55
Henk Mollema

[ApiController]属性は、ASP.NET Coreバージョン2.1で実際に追加されました。

属性と組み合わされた機能は次のとおりです。

  • 検証エラーにより、HTTP 400応答が自動的にトリガーされます。
  • [FromBody][FromRoute]、...属性を明示的に定義する必要はもうありません

ドキュメントへのリンク:

更新

また、コントローラが継承するベースクラスControllerBaseもあります。これは、ビュー関連の機能をすべて省略しているため、APIコントローラに適しています。

15
Riscie

ASP.NETコアでは、ASP.NET MVCおよびASP.NET WepAPIで知られている用語と概念を使用しています。しかし、基本的には完全に新しいフレームワークです。したがって、単純に忘れることができるいくつかの概念または基本クラスがあります。

ASP.NET MVCとASP.NET WebApiは共存しますが、異なるフレームワークであるため、ベースクラスとしてApiControllerを使用して、コントローラーをWebApiコントローラーとして指定するには明確な判断が必要です。

ASP.NET Coreでは、これはもう必要ありません。 Controller基本クラスは、Razorビューまたは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);
     }
 }
10
Ralf Bönning

他の人が述べたように、ASP.NET Coreは古いASP.NET MVC Webstackと互換性のない完全に新しいWebstackです。これは、その名前とバージョン管理に明示的に反映されています!

ASP.NET CoreとASP.NET Core MVCにはバージョン1.0.0があり、この非互換性を明確にしています。

ASP.NET Coreは、MVCとWebApiを、呼び出された1つのApiにマージしました。

そして、あなたが探しているかもしれないものがあります:

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

ただし、これは既存のアプリケーションの移行を支援するためだけのものであることに注意してください。新しいアプリケーションを作成するとき、この互換性シムを使用するのではなく、新しいものを使用する必要があります。

4
Tseng