Asp.net-core-action-results
ASP.NET Core-アクション結果
この章では、アクション結果について説明します。 前の章では、コントローラーとして単純で単純なC#クラスを使用してきました。 これらのクラスは基本クラスから派生するものではなく、MVCでこのアプローチを使用できますが、Microsoft.AspNet.Mvc名前空間で提供されるコントローラー基本クラスからコントローラーを派生する方が一般的です。
- この基本クラスを使用すると、リクエストに関する多くのコンテキスト情報にアクセスしたり、結果を構築してクライアントに返送するのに役立つメソッドを利用したりできます。
- 応答で単純な文字列と整数を送り返すことができます。 オブジェクトのような複雑なオブジェクトを返送して、学生や大学、レストランなどを表すこともできます。 そのオブジェクトに関連付けられているすべてのデータ。
- これらの結果は通常、IActionResultインターフェイスを実装するオブジェクトにカプセル化されます。
- このインターフェイスを実装する多くの異なる結果タイプがあります—モデルまたはダウンロード用のファイルのコンテンツを含むことができる結果タイプ。
- これらの異なる結果タイプにより、JSONをクライアント、XML、またはHTMLを構築するビューに送り返すことができます。
基本的に、アクションはさまざまなタイプのアクション結果を返します。 ActionResultクラスは、すべてのアクション結果のベースです。 以下は、さまざまな種類のアクション結果とその動作のリストです。
Name | Behavior |
---|---|
ContentResult | Returns a string |
FileContentResult | Returns file content |
FilePathResult | Returns file content |
FileStreamResult | Returns file content. |
EmptyResult | Returns nothing |
JavaScriptResult | Returns script for execution |
JsonResult | Returns JSON formatted data |
RedirectToResult | Redirects to the specified URL |
HttpUnauthorizedResult | Returns 403 HTTP Status code |
RedirectToRouteResult | Redirect to different action/different controller action |
ViewResult | Received as a response for view engine |
PartialViewResult | Received as a response for view engine |
例1
*HomeController* クラスを開いて簡単な例を実行し、コントローラーベースのクラスから派生させます。 この基本クラスは、 *Microsoft.AspNet.Mvc* 名前空間にあります。 以下は、HomeControllerクラスの実装です。
using Microsoft.AspNet.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace FirstAppdemo.Controllers {
public class HomeController : Controller {
public ContentResult Index() {
return Content("Hello, World! this message is from
Home Controller using the Action Result");
}
}
}
これで、インデックスメソッドが結果タイプの1つであるContentResultを返し、これらすべての結果タイプが最終的に ActionResult であるインターフェイスを実装していることがわかります。
Indexメソッドでは、文字列をContentメソッドに渡しました。 このContentメソッドは、ContentResultを生成します。これは、Indexメソッドが ContentResult を返すことを意味します。
*HomeController* クラスを保存して、ブラウザーでアプリケーションを実行しましょう。 次のページが生成されます。
これで、以前の応答とまったく同じように見える応答が表示されます。 プレーンテキストの応答になります。
- ActionResult を生成する何かを使用することの利点は何かと疑問に思われるかもしれません。
- 典型的な利点は、コントローラーの決定をカプセル化するための単なる正式な方法であるということです。
- コントローラは次に何をするかを決定し、文字列またはHTMLを返すか、JSONなどにシリアル化される可能性のあるモデルオブジェクトを返します。
- コントローラーが行う必要があるのは、その決定を行うことだけであり、コントローラーはその決定の結果を応答に直接書き込む必要はありません。
- 決定を返すだけで、結果を取得し、その結果をHTTPで返送できるものに変換する方法を理解するのはフレームワークです。
例2
別の例を見てみましょう。 プロジェクトに新しいフォルダーを作成し、 Models と呼びます。 Modelsフォルダー内に、Employeeを表すことができるクラスを追加します。
上記のスクリーンショットのように、「名前」フィールドに Employee.cs と入力します。 ここで、Employeeクラスの実装には2つのプロパティが含まれています。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace FirstAppDemo.Models {
public class Employee {
public int ID { get; set; }
public string Name { get; set}
}
}
*HomeController* のIndexアクションメソッド内で、Employeeオブジェクトを返します。 以下は、HomeControllerの実装です。
using FirstAppDemo.Models;
using Microsoft.AspNet.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace FirstAppdemo.Controllers {
public class HomeController : Controller {
public ObjectResult Index() {
var employee = new Employee { ID = 1, Name = "Mark Upston"};
return new ObjectResult(employee);
}
}
}
ここで、Contentを返す代わりに、 ObjectResult として知られる異なるタイプの結果を返します。 ObjectResultが必要な場合は、ObjectResultを作成またはインスタンス化し、それに model オブジェクトを渡す必要があります。
- ObjectResultは、MVCフレームワークで特別です。ObjectResultを返すと、MVCフレームワークがこのオブジェクトを参照するためです。 このオブジェクトは、HTTP応答で表す必要があります。
- このオブジェクトはXMLまたはJSONまたはその他の形式にシリアル化する必要があり、最終的には、起動時にMVCに提供する構成情報に基づいて決定が行われます。 何も構成しない場合は、いくつかのデフォルトを取得するだけで、デフォルトはJSON応答です。
すべてのファイルを保存し、ブラウザを更新します。 次の出力が表示されます。