1. ホーム
  2. c#

[解決済み] ASP.NET Core Web APIでControllerBaseから派生する理由とControllerから派生する理由とは?

2023-05-06 16:11:13

疑問点

ASP.NET Core Web APIを作成するためにこのチュートリアルに沿っています。コントローラを追加するセクションで、チュートリアルはコントローラ用のテンプレートコードを置き換えるコードを提供します。私が本当に目を引いたことの一つは、テンプレートコードで、私は取得します。

TodoController : Controller

そして、チュートリアルのコードでは、その代わりに使うことになっている、私は見つけます。

[Route("api/[controller]")]
[ApiController]
TodoController : ControllerBase

からの導出がなぜ必要なのか、非常に興味があります。 ControllerBase ではなく Controller を使用します。なぜこのようなことをするのでしょうか?

どのように解決するのですか?

<ブロッククオート

からの導出が必要な理由 ControllerBase ではなく Controller を Web API コントローラのために使用します。

厳密には不要ですが、よりポイントになることだけは確かです。その Controller から派生したクラスです。 ControllerBase を継承し、Views をサポートするためにのみ必要ないくつかのメンバを追加しています。

基本的には

public abstract class Controller : ControllerBase
{
    public dynamic ViewBag { get; }
    public virtual ViewResult View(object model) { }
    // more View support stuff
}

APIを書く場合は、ControllerBaseの方が要件にマッチしますが、どちらも動作します。

のあたりで ドキュメント を参照してください (強調)。

Controller クラスから派生して Web API コントローラを作らないようにしましょう。Controller は ControllerBase から派生してビューのサポートを追加したものであり、Web API のリクエストではなく Web ページを処理するためのものです。このルールには例外があります。 もし同じコントローラをビューとウェブ API の両方に使用する場合は、 Controller .

最初のMVCの反復ではControllerBaseは存在せず、後から挿入されたように記憶しています。そのため、少し奇妙な名前付けと継承の構造になっています。