以下からの抜粋https://www.cnblogs.com/ken-io/p/aspnet-core-tutorial-mvc-controller-action.html
I.はじめに
1、メインコンテンツチュートリアル
- ASP.NET MVCコントローラ・コア
- ASP.NET MVCコントローラ・コア操作ガイド
- ASP.NET MVCコアコントローラのアクションの戻り値の型はじめに
- ASP.NET MVCコントローラ・コアの戻り値の型の操作の典型的な導入
- ASP.NETコアMVCコントローラパラメータマッピングロジック説明
- ASP.NET MVCコントローラ・コアパラメータマップ/取得の例
2、このチュートリアルの環境情報
ソフトウェア/環境 | 説明 |
---|---|
オペレーティングシステム | ウインドウズ10 |
SDK | 2.1.401 |
ASP.NETコア | 2.1.3 |
HERE | Visual Studioのコード1.27 |
ブラウザ | クローム69 |
:コードを調整するために、次のコードBenpian https://github.com/ken-io/asp.net-core-tutorial/tree/master/chapter-02
3、事前知識
あなたは知識を事前にする必要があるかもしれません
- MVCフレームワーク/モデル記述
https://baike.baidu.com/item/mvc
二、ASP.NET MVCコントローラ・コア
1、ASP.NET MVCのコアコントローラの概要
MVCのWebフレームワークでは、ルーティングモジュールは、受信されたと対応するコントローラ(コントローラ)要求による処理のために転送一致します。
コントローラの処理要求の役割は、受信解析し、プログラムロジックに対応するユーザ入力処理を実行し、その後、対応する出力が返されます。
ユーザ入力は、HTTPヘッダー、HTTP体であってもよい、のQueryString、いるFormDataであってもよいです。
コントローラの出力形式は、通常は次のとおりです。HTML、JSON、XML、プレーンテキスト
図2に示すように、制御装置(コントローラ)の定義
すべてのコントローラクラスは、直接または間接的に継承する必要がありますMicrosoft.AspNetCore.Mvc.ControllerBase
。ビューエンジンを一致させるためには、ASP.NET MVCフレームワークのコアが組み込まれて Microsoft.AspNetCore.Mvc.Controller
エンジンを閲覧するために必要な機能のいくつかを提供するクラスを。だから、デフォルトでは、我々は、このクラスを拡張することができます。
図3に示すように、制御装置(コントローラ)と名付け
コントローラクラスのクラス名(クラス名)は、推奨Controller
エンディング(大文字と小文字を区別しません)。
例えば:
- HomeController
- TestController
コントローラルーティングモジュールは、コントローラ名の末尾として除去されます。
そして、対応するControllerName
ことがなかったですHome
、Test
。これはまた、コントローラを識別するためのメインルートマッピングです。
もちろん、あなたはコントローラのクラス名(クラス名)固定サフィックスをコントローラとして、その後、ルーティングモジュールは、完全修飾クラス名(クラス名)となりますことはできませんControllerName
ASP.NET MVCフレームワークでは、接尾辞としてクラス名のコントローラ(コントローラ)コントローラが、この制限は、ASP.NETコアMVCフレームワークで除去しなければなりません。
以下の定義コントローラが可能です。
//推荐
public class HomeController : Controller { //ControllerName=Home } public class HomeController : BaseController { //ControllerName=Home } public class Test : Controller { //ControllerName=Test }
三、ASP.NET MVCコントローラ・コア操作ガイド
1、ASP.NET MVCコントローラのコア事業の概要
コントローラは、アプリケーション処理要求/機能の実際の方法で要求を受信した後、コントローラ(制御装置)の動作(アクション)です。
次に、アクションの最終的な実際の実行が完了した後、アクションパラメータにユーザの入力をマップする、対応ACTIONNAMEアクションに従ってルートを見つけるための要求を受信した後、コントローラは、対応する出力を返します。
図2に示すように、コントローラ動作(アクション)が定義されています
アクションは、例えば、コントローラで定義されたパブリック非静的メソッドでなければなりません。
public class HomeController : Controller { public IActionResult Index() { return Content("Hello World ! -ken.io"); } public string Test() { return "test"; } public void DoSomething() { //DoSomething } }
デフォルトのルーティング設定で:
- アクション:インデックス()応答/ホーム/インデックス要求
- 処置:テスト()応答/ホーム/テスト要求
- アクション:doSomethingの()応答/ホーム/ doSomethingのリクエスト
あなたはコントローラを定義しますが、このメソッドはリクエストを処理したくない場合は、それはNonActionとしてマークすることができます公共非静的メソッド
public class HomeController : Controller { [NonAction] public void LogicMethod(){ } }
図3に示すように、動作制御部(アクション)戻り型説明
ASP.NETコアMVCアクション戻り型が達成するために定義されなければならないMicrosoft.AspNetCore.Mvc.IActionResult
フレーム自体は、このインターフェイスのデフォルト実装を提供し、インタフェースの種類Microsoft.AspNetCore.Mvc.ActionResult
、および提供のActionResultクラス異なるコンテンツ形式必要な出力のためのサブクラス。
この方法は、アクションを定義したときただし、戻り値の型は、応答フレームに戻る前に、カスタム型のストリームを返しますなどの文字列、int型、と定義することができ、自動包装のActionResultサブタイプに適しています。
説明一般的に使用されるのActionResultサブクラス
アクション戻り値の型 | コントローラ内蔵の方法 | 説明 |
---|---|---|
するViewResult | 見る() | カミソリと呼ばれるデータのビューには、エンジンのレンダリングを表示します |
するPartialViewResult | PartialView() | カミソリと呼ばれるデータのビューは、エンジン断面図(PartialView)レンダリングを表示します |
ContentResult | コンテンツ() | カスタムテキストを返します。 |
化するJsonResult | JSON() | オブジェクトJSONのシリアライズを返します。 |
ファイル飢餓 | ファイル() | 戻るバイナリ出力に応じて書き込まれます |
RedirectResult | リダイレクト() | 指定されたURLにリダイレクトさ |
RedirectToRouteResult | RedirectToAction()、RedirectToRoute() | アクションまたは指定されたルートにリダイレクト |
EmptyResult | / | リターンキーがvoidの定義アクションまたはアクションにEmptyResultリターンヌルとしてパッケージ化されます |
四、ASP.NET MVCのコアアクションの例示的な方法の戻り値の型
1、仕事する準備ができて
コントローラのフォルダに新しいActionResultTestController.cs
とテストのためのコントローラクラスから継承されました。
using System;
using Microsoft.AspNetCore.Mvc;
namespace Ken.Tutorial.Web.Controllers { public class ActionResultTestController : Controller { } }
テストコントローラ専用ルーティングStartup.csの設定
//配置ActionResult测试专用路由
routes.MapRoute(
name: "ActionResultTest",
template: "art/{action}", defaults: new { controller = "ActionResultTest"} );
2、ContentResultは、例を使用し
アクションの戻りContentResultの定義
public IActionResult ContentTest() { return Content("Content Result Test --ken.io"); }
スタートアップ項目、ブラウザアクセス{ホスト:ポート} /技術/ contenttest、次の出力を参照してください。
ContentResult Test by ken.io
3、化するJsonResultは、例を使用し
アクションの戻り化するJsonResultを定義します
public IActionResult JsonTest() { return Json(new { Message = "JsonResult Test", Author = "ken.io" }); }
スタートアップ項目、ブラウザアクセス{ホスト:ポート} /技術/ jsontestは、次の出力を参照してください
{
"message": "JsonResult Test",
"author": "ken.io" }
4、FileResultは、例を使用し
アクションFileResultのリターンを定義します
public IActionResult FileTest() { var bytes = Encoding.Default.GetBytes("FileResult Test by ken.io"); return File(bytes, "application/text", "filetest.txt"); }
起動項目、ブラウザアクセス{ホスト:ポート} /アート/ jsontest、 ファイルをダウンロードしますfiletest.txt。
ファイルの内容:
FileResult Test by ken.io
図5は、リダイレクトは、例を使用し
リターン・アクションの関連定義をリダイレクト
public IActionResult RedirectTest() { return Redirect("https://ken.io"); } public IActionResult RedirectToActionTest() { return RedirectToAction("jsontest"); } public IActionResult RedirectToRouteTest() { return RedirectToRoute("Default", new { Controller = "home", Action = "index" }); }
テストにアクセスするには、プロジェクトブラウザを起動します。
- アクセス/アート/ redirecttest、にジャンプします https://ken.io
- アクセス/アート/ redirecttoactiontest、jsontest / /芸術にジャンプします
- アクセス/アート/ redirecttoroutetest、/にジャンプします
五、ASP.NET MVCコアアクションメソッドのパラメータのマッピング例
1、アクションパラメータマップの説明
コントローラの処理に対応する要求をルーティングすることは、対応するアクションコントローラメソッドを見つけるために呼ばれる、とからRouteDataの要求データ(のQueryString、いるFormData、ヘッダなど)またはHTTPメソッドパラメータを実行するために必要な値を見つけます。
データを対応するパラメータが見つからない場合、パラメータタイプがnullのタイプである場合、ヌル値は、それ以外の場合はにつながる、配達へのパラメータとして渡されます。
また、アクションパラメータの方法はマニュアルから、定義されなくてもよいRouteData要求データ(等のQueryString、いるFormData、ヘッダ)または対応するHTTP GETパラメータ値。
2.準備
コントローラのフォルダに新しいParamsMappingTestController.cs
とテストのためのコントローラクラスから継承されました。
using System;
using Microsoft.AspNetCore.Mvc;
namespace Ken.Tutorial.Web.Controllers { public class ParamsMappingTestController:Controller { } }
テストコントローラ専用ルーティングStartup.csの設定
//配置参数映射测试专用路由
routes.MapRoute(
name: "ParamsMappingTest",
template: "pmt/{action}/{id?}", defaults: new { controller = "ParamsMappingTest"} );
図3に示すように、基本的なパラメータマップの例
アクションの定義は、ルーティングパラメータを受け取り、
public IActionResult GetId(int id) { return Content($"Action params mapping test by ken.io, id:{id}"); }
?アプリケーションを起動し、ブラウザアクセス/ PMT /のgetId / 1024 / PMT /のgetId ID = 1024は、次のような出力が表示されます。
Action params mapping test by ken.io, id:1024
またはHTTPヘッダIDの増加=ツールポストポストマンのアクセスのような1024個のパラメータ/ PMT /のgetIdとリクエストを送信し、同じ出力が表示されます。
4、マッピングアレイパラメータの例
アクション定義受信アレイパラメータ
public IActionResult GetArray(string[] id) { var message = "Action params mapping test by ken.io,id:"; if (id != null) { message += string.Join(",", id); } return Content(message); }
?アプリケーションの起動、ブラウザアクセス/ PMT /のgetArray / 1,2または/ PMT / getArrayをID = 1,2、次のような出力が表示されます。
Action params mapping test by ken.io,id:1,2
等の郵便配達ツールポスト/ PMT / getArrayをフォームを介してアクセスしてパラメータを設定し、要求を送信し、我々は同じ出力が表示されます。
5、パラメータマップのカスタムタイプの例
プロジェクトのルートディレクトリにあるモデルのフォルダを作成し、クラスファイルPerson.csを作成します
public class Person { public string Name { get; set; } public int Age { get; set; } }
カスタムパラメータアクションの定義を受け取ります
public IActionResult GetPerson(Person person) { return Json(new { Message = "Action params mapping test by ken.io", Data = person }); }
アプリケーションの起動、ブラウザアクセス/ PMT / getperson名=ケン&年齢= 18は、次のような出力が表示されます?:
{
"message": "Action params mapping test by ken.io",
"data": { "name": "ken", "age": 18 } }
またはアクセス/ PMT / getperson郵便配達用刃物などのフォームパラメータによって、リクエストを送信し、あなたは同じ出力が表示されます。
6、カスタムタイプのアレイの例示的なパラメータマッピング
配列パラメータのアクションのカスタムタイプの定義を受け取ります
public IActionResult GetPersonList(List<Person> person) { return Json(new { Message = "Action params mapping test by ken.io", Data = person }); }
アプリケーションを起動し、ブラウザアクセス/pmt/getpersonlist?person[0].name=ken&person[0].age=18&person[1].name=tom&person[1].age=20は、
次のような出力が表示されます。
{
"message": "Action params mapping test by ken.io",
"data": [ { "name": "ken", "age": 18 }, { "name": "tom", "age": 20 } ] }
等の郵便配達ツールポスト/ PMT / getpersonlistフォームを介してアクセスしてパラメータを設定し、要求を送信し、我々は同じ出力が表示されます。
7、JSON型パラメータマッピング例
JSONを受けたアクション定義の型パラメータ
public IActionResult GetPersonJson([FromBody]Person person) { return Json(new { Message = "Action params mapping test by ken.io", Data = person }); }
アプリケーションを起動し、この時間は、我々は唯一の郵便配達でツールをテストすることができます
まずセットのContent-Type =アプリケーション/ JSON
JSONはその後、パラメータを設定し、リクエストフォームを送信し、あなたは、対応する出力が表示されます。
図8に示すように、例示的なパラメータは、手動で取得します
定義されたパラメータを手動でアクションを取得します
public IActionResult GetByHand() { return Json(new { Id = RouteData.Values["id"], Name = Request.Query["name"] }); }
?アプリケーションが起動した後、ブラウザアクセス/ PMT / getbyhand / 1024名=ケン&名前=トム&年齢= 18は、
次のような出力が表示されます。
{
"id": "1024",
"name": [ "ken", "tom" ] }
RouteData.Values [「ID」]:ルーティングデータからデータ取得
Request.Queryを[「名前」]:取得されたURLからデータパラメータ
のRequest.Form [「名前」]:フォームパラメータからデータを取得します