ASP.NET Core入門教程4、ASP.NET Core MVCコントローラ入門
11196 ワード
一、前言
1、この教程の主な内容
2、このチュートリアルの環境情報
ソフトウェア/環境
説明
オペレーティングシステム
Windows 10
SDK
2.1.401
ASP.NET Core
2.1.3
IDE
Visual Studio Code 1.27
エクスプローラ
Chrome 69
このコードは以下のコードで調整されます.https://github.com/ken-io/asp...
3、前置き知識
前置きの知識が必要かもしれません
二、ASP.NET Core MVCコントローラの概要
1、ASP.NET Core MVCコントローラの概要
MVC Webフレームワークでは、ルーティングモジュールが受信した要求をマッチングし、対応するコントローラに渡して処理する.コントローラの役割は,受信した要求を処理し,ユーザ入力を解析して対応するプログラム論理を実行し,対応する出力を返すことである.
ユーザの入力は、QueryString、FormData、HTTP Header、HTTP Bodyであってもよい.コントローラの出力フォーマットは、通常、HTML、JSON、XML、通常テキスト
2、コントローラの定義
すべてのControllerクラスは、
Microsoft.AspNetCore.Mvc.ControllerBase
に直接または間接的に継承する必要があります.ビューエンジンと組み合わせて使用するため、ASP.NET Core MVCフレームワークにはMicrosoft.AspNetCore.Mvc.Controller
クラスが内蔵されており、いくつかのビューエンジンに必要な特性を提供しています.したがって、デフォルトではクラスを継承すればいいです.3、コントローラの名前
Controllerクラスのクラス名(ClassName)は、
Controller
(大文字と小文字を区別しない)で終わることを推奨します.例:ルーティングモジュールは、最後のControllerをControllerNameとして削除します.では、対応する
ControllerName
はそれぞれHome
、Test
である.これもルートがControllerにマッピングされる主な識別子です.もちろん、コントローラクラス名(ClassName)の固定接尾辞としてControllerを使用しなくても、ルーティングモジュールは
ControllerName
として完全なクラス名(ClassName)を使用します.ASP.NET MVCフレームワークでは、コントローラ(Controller)クラス名はControllerを接尾辞としなければならないが、ASP.NET Core MVCフレームワークではこの制限を外しています。
以下のControllerの定義はすべて可能です.
//
public class HomeController : Controller
{
//ControllerName=Home
}
public class HomeController : BaseController
{
//ControllerName=Home
}
public class Test : Controller
{
//ControllerName=Test
}
三、ASP.NET Core MVCコントローラ操作概要
1、ASP.NET Core MVCコントローラの操作概要
コントローラ(Controller)操作(Action)は、コントローラが要求を受信して実際に要求を処理するプログラム方法/関数である.
Controllerは,要求を受信するとルーティングのActionNameに従って対応するActionを見つけ,そのActionのパラメータにユーザの入力をマッピングし,最終的にActionが実際に実行されてから対応する出力を返す.
2、コントローラ操作(Action)の定義
Actionは、コントローラで定義されている共通の非静的メソッドである必要があります.たとえば、次のようにします.
public class HomeController : Controller
{
public IActionResult Index()
{
return Content("Hello World ! -ken.io");
}
public string Test()
{
return "test";
}
public void DoSomething()
{
//DoSomething
}
}
デフォルトのルーティング構成に従います.
Controllerで共通の非静的メソッドを定義したが、このメソッドにリクエストを処理させたくない場合は、NonActionとマークすることができます.
public class HomeController : Controller
{
[NonAction]
public void LogicMethod(){
}
}
3、コントローラ操作(Action)返却タイプ説明
ASP.NET Core MVCは、アクション戻りタイプを定義するには、
Microsoft.AspNetCore.Mvc.IActionResult
インタフェースを実装するタイプでなければならない.フレームワーク自体は、このインタフェースのデフォルト実装Microsoft.AspNetCore.Mvc.ActionResult
を提供し、異なるコンテンツフォーマットの要件を出力するためにActionResultクラスのサブクラスを提供する.ただし、Actionメソッドを定義する場合、戻り値タイプはstring、intなどと定義することもでき、これらのカスタム戻りタイプは、応答ストリームに戻る前にフレームワークによって適切なActionResultサブタイプに自動的にパッケージされます.
一般的なActionResultサブクラスの説明
アクション戻りタイプ
Controller組み込み方法
説明
ViewResult
View()
Razorビューエンジンによるレンダリングにビューデータを渡す
PartialViewResult
PartialView()
ビューデータをRazorビューエンジン部分ビュー(PartialView)でレンダリングする
ContentResult
Content()
カスタムテキストを返す
JsonResult
Json()
オブジェクトのJSONシーケンス化結果を返します
FileResult
File()
書き込み応答のバイナリ出力を返します
RedirectResult
Redirect()
指定したUrlにリダイレクト
RedirectToRouteResult
RedirectToAction(),RedirectToRoute()
指定したアクションまたはルーティングにリダイレクト
EmptyResult
/
Actionがnullを返すか、Actionが返すキーワードがvoidであることを定義するとEmptyResultとしてパッケージされます
四、ASP.NET Core MVCアクションメソッド戻りタイプ例
1、準備
Controllersフォルダに
ActionResultTestController.cs
を新規作成し、テスト用にControllerクラスに継承します.using System;
using Microsoft.AspNetCore.Mvc;
namespace Ken.Tutorial.Web.Controllers
{
public class ActionResultTestController : Controller
{
}
}
スタータープで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");
}
プロジェクトを開始し、ブラウザが{host:port}/art/contenttestにアクセスすると、次の出力が表示されます.
ContentResult Test by ken.io
3、JsonResult使用例
JsonResultを返すアクションの定義
public IActionResult JsonTest()
{
return Json(new { Message = "JsonResult Test", Author = "ken.io" });
}
プロジェクトを開始し、ブラウザが{host:port}/art/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");
}
プロジェクトを起動し、ブラウザが{host:port}/art/jsontestにアクセスすると、ファイルfiletestがダウンロードされます.txt.ファイルの内容は次のとおりです.
FileResult Test by ken.io
5、Redirect使用例
Redirect関連アクションを返す定義
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" });
}
プロジェクトの開始、ブラウザアクセステスト:
五、ASP.NET Core MVCアクションメソッドパラメータマッピング例
1、Actionパラメータマッピング説明
ルーティングが対応するControllerに要求を渡すと、Controllerは対応するActionメソッドを見つけ、RouteDataまたはHTTP要求データ(QueryString、FormData、Headerなど)からそのメソッドを実行するために必要なパラメータの値を見つけます.
パラメータに対応するデータが見つかりません.パラメータタイプがnullのタイプである場合、nullはパラメータ値として渡されます.そうしないと、フィールドが開始されます.
また、Actionメソッドは、パラメータを定義せずに、RouteDataまたはHTTPリクエストデータ(QueryString、FormData、Headerなど)から、対応するパラメータ値を手動で取得してもよい.
2、準備
Controllersフォルダに
ParamsMappingTestController.cs
を新規作成し、テスト用にControllerクラスに継承します.using System;
using Microsoft.AspNetCore.Mvc;
namespace Ken.Tutorial.Web.Controllers
{
public class ParamsMappingTestController:Controller
{
}
}
スタータープで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
あるいはPostManなどのツールpostアクセス/pmt/getidでHTTPヘッダパラメータにid=1024を追加してリクエストを送信しても同様の出力が見られます
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
または、PostManなどのツールpostから/pmt/getarrayにアクセスしてフォームパラメータを設定してリクエストを送信すると、同じ出力が表示されます.
5、カスタムタイプパラメータマッピング例
プロジェクトのルートディレクトリにModelsフォルダを作成し、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?name=ken&age=18で、次の出力が表示されます.
{
"message": "Action params mapping test by ken.io",
"data": {
"name": "ken",
"age": 18
}
}
または、PostManなどのツールpostから/pmt/getpersonにアクセスし、フォームパラメータを設定してリクエストを送信すると、同じ出力が表示されます.
6、カスタムタイプ配列パラメータマッピング例
カスタムタイプ配列パラメータを受信するアクションの定義
public IActionResult GetPersonList(List 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
}
]
}
または、PostManなどのツールpostから/pmt/getpersonlistにアクセスし、フォームパラメータを設定してリクエストを送信すると、同じ出力が表示されます.
7、JSONタイプパラメータマッピング例
JSONタイプパラメータ受信アクションの定義
public IActionResult GetPersonJson([FromBody]Person person)
{
return Json(new { Message = "Action params mapping test by ken.io", Data = person });
}
アプリケーションを起動すると、PostManツールでテストするしかありません.
まずContent-Type=アプリケーション/jsonを設定
JSONフォームパラメータを設定して要求を送信すると、対応する出力が表示されます
8、手動取得パラメータの例
手動取得パラメータのアクションの定義
public IActionResult GetByHand()
{
return Json(new
{
Id = RouteData.Values["id"],
Name = Request.Query["name"]
});
}
アプリケーションが起動すると、ブラウザアクセス/pmt/getbyhand/1024?name=ken&name=tom&age=18には、次の出力が表示されます.
{
"id": "1024",
"name": [
"ken",
"tom"
]
}
RouteData.Values["id"]:ルーティングデータからデータを取得するRequest.Query["name"]:Urlパラメータからデータを取得するRequest.Form[「name」:フォームパラメータからデータを取得する
六、備考
1、付録
この記事は、私の独立したブログに掲載されています.https://ken.io/note/asp.net-c...