次の方法で共有


アクションを作成する (C#)

提供元: Microsoft

ASP.NET MVC コントローラーに新しいアクションを追加する方法について説明します。 メソッドをアクションにするための要件について説明します。

このチュートリアルの目的は、新しいコントローラー アクションを作成する方法を説明することです。 アクション メソッドの要件について説明します。 また、メソッドがアクションとして公開されないようにする方法についても説明します。

コントローラーへのアクションの追加

コントローラーに新しいメソッドを追加することで、コントローラーに新しいアクションを追加します。 たとえば、リスト 1 のコントローラーには、Index() という名前のアクションと SayHello() という名前のアクションが含まれています。 どちらのメソッドもアクションとして公開されます。

リスト 1 - Controllers\HomeController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public string SayHello()
        {
            return "Hello!";
        }
    }
}

アクションとしてグローバルに公開するには、メソッドは特定の要件を満たす必要があります。

  • メソッドはパブリックでなければなりません。
  • メソッドを静的メソッドにすることはできません。
  • メソッドを拡張メソッドにすることはできません。
  • メソッドを、コンストラクター、ゲッター、またはセッターにすることはできません。
  • メソッドは、オープン ジェネリック型を持つことはできません。
  • メソッドは、コントローラーの基底クラスのメソッドではない。
  • メソッドに ref パラメーターおよび out パラメーターを含めることはできません。

コントローラー アクションの戻り値の型に制限がないことに注意してください。 コントローラー アクションは、文字列、DateTime、Random クラスのインスタンス、または void を返すことができます。 ASP.NET MVC フレームワークにより、アクションの結果ではない戻り値の型は文字列に変換され、その文字列がブラウザーにレンダリングされます。

これらの要件に違反しないメソッドをコントローラーに追加すると、そのメソッドはコントローラー アクションとして公開されます。 ここで注意が必要です。 コントローラー アクションは、インターネットに接続されているすべてのユーザーが呼び出すことができます。 たとえば、DeleteMyWebsite() コントローラー アクションを作成しないでください。

パブリック メソッドが呼び出されないようにする

コントローラー クラスでパブリック メソッドを作成する必要があり、そのメソッドをコントローラー アクションとして公開したくない場合は、[NonAction] 属性を使用してメソッドが呼び出されないようにすることができます。 たとえば、リスト 2 のコントローラーには、[NonAction] 属性で修飾された CompanySecrets() という名前のパブリック メソッドが含まれています。

リスト 2 - Controllers\WorkController.cs

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    public class WorkController : Controller
    {
        [NonAction]
        public string CompanySecrets()
        {
            return "This information is secret.";
        }
    }
}

ブラウザーのアドレス バーに 「/Work/CompanySecrets」と入力して CompanySecrets() コントローラー アクションを呼び出そうとすると、図 1 のエラー メッセージが表示されます。

Invoking a NonAction method

図 1: NonAction メソッドの呼び出し (フルサイズの画像を表示するにはクリックします)