C#
 Computer >> コンピューター >  >> プログラミング >> C#

ASP.NET MVC C#におけるNonAction属性(NonActionAttribute)の重要性とは?

NonAction 属性は、コントローラー内にパブリックメソッドを定義したいものの、それをアクションメソッドとして扱いたくない場合に使用します。

アクションメソッドとは、URLを使って呼び出すことができるコントローラー内のパブリックメソッドのことです。そのため、デフォルトではコントローラー内に定義されたすべてのパブリックメソッドは、URLリクエスト経由で呼び出し可能な状態になっています。コントローラー内のパブリックメソッドへのアクセスを制限したい場合は、NonAction属性を利用することで実現できます。

ここで、MyMethod1MyMethod2 という2つのパブリックメソッドを持つ HomeController を例に考えてみましょう。

コントローラー

using System.Web.Mvc;
namespace DemoMvcApplication.Controllers{
    public class HomeController : Controller{
        public string MyMethod1(){
            return "<h1>My Method 1 Invoked</h1>";
        }
        public string MyMethod2(){
            return "<h1>My Method 2 Invoked</h1>";
        }
    }
}

以下のURLを使って、HomeController の両方のメソッドを呼び出してみます。

https://localhost:59146/Home/MyMethod1

https://localhost:59146/Home/MyMethod2

ASP.NET MVC C#におけるNonAction属性(NonActionAttribute)の重要性とは?

ASP.NET MVC C#におけるNonAction属性(NonActionAttribute)の重要性とは?

このように、デフォルトの状態ではどちらのメソッドもURLから自由にアクセスできてしまいます。

ここで、MyMethod2 が何らかの内部的な用途のためだけのものであり、URLリクエストからは呼び出せないようにしたいとします。これを実現するには、該当メソッドに NonAction 属性を付与します。

コントローラー

using System.Web.Mvc;
namespace DemoMvcApplication.Controllers{
    public class HomeController : Controller{
        public string MyMethod1(){
            return "<h1>My Method 1 Invoked</h1>";
        }
        [NonAction]
        public string MyMethod2(){
            return "<h1>My Method 2 Invoked</h1>";
        }
    }
}

NonAction属性を付与した MyMethod2 にアクセスした場合の出力結果は以下のようになります。

出力結果

ASP.NET MVC C#におけるNonAction属性(NonActionAttribute)の重要性とは?

このように、NonAction属性を付けたメソッドにはURL経由でアクセスできなくなり、「404 Not Found」などのエラーが返されるようになります。

補足:NonAction以外の代替手段

なお、同様の目的を達成する方法としては、メソッドのアクセス修飾子を privateprotected に変更する方法もあります。ただし、クラス内部ではパブリックとして扱いつつ、ルーティングの対象からのみ除外したいケースでは、NonAction属性が最もシンプルで意図が明確な選択肢となります。

  1. ASP.NET MVC C#におけるChildActionOnly属性とは?使い方をわかりやすく解説

    ChildActionOnly属性とは?ASP.NET MVCにおいて、[ChildActionOnly]属性が付与されたアクションメソッド(子アクション/Child Action)は、子リクエスト(child request)からのみアクセス可能です。そのため、ブラウザからURLを直接指定してアクセスすることはできません。URL経由で直接アクセスしようとすると、実行時に次のようなエラーがスローされます。「Child action is accessible only by a child request」(子アクションは子リクエストからのみアクセスできます)子アクションメソッドは、ビュー(V

  2. C# ASP.NET Web APIのフィルターの種類と使い方を徹底解説

    ASP.NET Web APIフレームワークでは、リクエスト処理のさまざまな段階に追加のロジックを組み込むために「フィルター」が使用されます。フィルターは、ロギング、認可、キャッシュといった横断的関心事(クロスカッティングコンサーン)を実装するための仕組みであり、アクションメソッドやコントローラーに対して、宣言的またはプログラム的に適用できます。ここでは、C#のWeb APIで利用できる主なフィルターの種類について詳しく見ていきましょう。Web APIの主なフィルターの種類1. 認証フィルター(Authentication Filter)認証フィルターは、ユーザーの身元情報を検証するために使用