「コードの200行、7つのオブジェクトが-ので、あなたがのASP.NETコアフレームワークの本質を理解することを」非常に多くの読者はASP.NETコア・パイプラインの深い理解を持っているが、各要求のためのASP.NETのコアフレームワークの処理の流れを知っています。時間の長い期間のために、私には多くの民間の手紙があります:あなたは同じようにMVCフレームワークを分析することができます。私たちは本当のASP.NETコアMVCのコア部分を表示されますシミュレーションフレームワークのミニバージョンを使用して、同様の大幅な「カット」「特徴点」の多くに残っているので、真のMVCフレームワークは、実際には非常に複雑です。そして、ASP.NETコアフレームワークのミニバージョンは、ASP.NET MVCフレームワークコアのミニバージョンが同じ実フレームワーク一貫したデザインを使用し、同じことが直接実行することができます。よりよく保護するために、私は、これら二つのシミュレーションフレームワークを入れgithubの上を。
ASP.NETコアミニ:https://github.com/jiangjinnan/AspNetCoreMini
ASP.NET MVCコアミニ:https://github.com/jiangjinnan/AspNetCoreMvcMini
第I部ルーティングの統合
(「ASP.NETコア3の枠組みの秘密」ミドルウェアをルーティングの次のボリュームを捧げてきたが、この本はJingdongは、フル参加している全ルートのミドルウェア上に構築されたMVCフレームワーク100-50学生が欠場することができます前に活動を、電車の中で50%の割引a)の上。コントローラモデル-ビュー-コントローラのプログラミングモデル、またはカミソリページページ指向のプログラミングモデルが直面しているかどうかは、それぞれの要求は、特定のアクション、これだけMVCにエンドポイントをルーティングパッケージのアクションに、各フレーム(RouteEndpointを必要としている向けられています)、およびEndpointDataSourceすることで、カスタムミドルウェアは、ルーティングに登録することができます。MVCフレームワークの統合およびルーティングのミドルウェア上Benpianフォーカス、我々は最大の簡素化のアクションメソッドが定義されて作られたよう:アクションメソッドは、ノンパラメトリックな方法は、我々は、結合パラメータの問題を考慮していないので、リターン・アクションの方法タスクまたは値は、タスクを処理するすべての要求は、プロセスで実装され、無効となります。もっと読みます ...
パブリック クラスFooBarController.phpの:コントローラ { 公共 ボイドはFoo(); パブリックタスクBarAsync(); 公共ValueTask BazAsync(); }
【ノヴェッラ】要求応答
私たちは、「[パートI]は:統合ルーティング」アクションメソッドコントローラタイプを定義しますするに縮小されてのみ、タスクまたはメソッドがvoidを返すと、リクエストにタスクを処理するすべての要求に対して適切であることを含む、方法自体は完了できるようにすることが、真アクションメソッドの戻り値の型に制限なしのMVCフレームワーク。一般的に、我々は、メソッドの戻り値の型がアクションIActionResult、タスク<IActionResult>またはValueTask <IActionResult>を定義した好みます。この方法は、オブジェクトのアクション他のタイプを返す場合、オブジェクトは、最終的にIActionResultオブジェクトに変換されます。プロセス・フロー要求のためのMVCフレームワークを通じて、IActionResultは仕事のための要求に応答の主な原因です。この記事では、我々は行動制限メソッドの戻り値の型と上記の、接触のさらなる改善のためのシミュレーションフレームワークを確立します。もっと読みます ...
パブリック クラスFooBarController.phpの:コントローラ { 公共IActionResultはFoo(); パブリックタスク<IActionResult> BarAsync(); 公共 ValueTask <IActionResult> BazAsync(); 公共FOOBAR Qux(); パブリックタスク<foobarに> QuuxAsync(); 公共 ValueTask <foobarに> CorgeAsync(); }
[次]パラメーター結合
アクションシミュレーションフレームワークは、これまでのところ、我々はMVCフレームワークは、任意の数のパラメータとタイプを含めることができ、パラメータのアクションメソッド、上の制限をしないことを知って、何のメソッドのパラメータが存在しないと仮定しました。ターゲットメソッドを実行する前にすべてのパラメータをバインドする必要があるため、「ゼロ引数」仮説を除去すると、アクションの実装方法は、簡単なようではないとなります。MVCフレームワークは、MVCフレームワークの実装処理の要求最も複雑な局面とみなすことができるアクションメソッドは、パラメータ目標出力を結合するために「結合モデル(モデルの結合)」と呼ばれるメカニズムを使用しています。この記事では、アクションメソッドのパラメータのための暴露限界を結合上記のモデルを実装することで、既存のフレームワークを完了するために進歩を遂げました。もっと読みます ...
パブリック クラスFooBarController.phpの:コントローラ { 公共IActionResultフー(Fooのfooの、バーバズ)。 パブリックタスク<IActionResult> BarAsync(フー・FOO、バーバズ)。 公共 ValueTask <IActionResult> BazAsync(フー・FOO、バーバズ)。 公共FOOBAR Qux(フー・FOO、バーバズ)。 パブリックタスク<foobarに> QuuxAsync(フー・FOO、バーバズ)。 公共 ValueTask <foobarに> CorgeAsync(フー・FOO、バーバズ)。 }