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

ASP.NET MVC(C#)でフィルターを適用できる3つのレベルとは?

ASP.NET MVCアプリケーションでは、フィルターを3つのレベルで適用することができます。それぞれ適用範囲が異なるため、目的に応じて使い分けることが重要です。

  • アクションメソッドレベル
  • コントローラーレベル
  • グローバルレベル

アクションメソッドレベル

アクションメソッドレベルで適用したフィルターは、その特定のアクションメソッドに対してのみ機能します。同じコントローラー内の他のアクションメソッドには影響しません。

using System.Web.Mvc;
namespace DemoMvcApplication.Controllers{
    public class HomeController : Controller{
        [Authorize] //アクションメソッドレベル
        public string Index(){
            return "Index Invoked";
        }
    }
}

上記の例では、[Authorize]属性はIndexメソッドにのみ適用され、認証されたユーザーだけがこのアクションを実行できます。

コントローラーレベル

コントローラーレベルのフィルターは、そのコントローラー内のすべてのアクションメソッドに適用されます。ただし、他のコントローラーには適用されません。

using System.Web.Mvc;
namespace DemoMvcApplication.Controllers{
    [Authorize] //コントローラーレベル
    public class HomeController : Controller{
        public string Index1(){
            return "Index1 Invoked";
        }
        public string Index2(){
            return "Index2 Invoked";
        }
    }
}

この例では、[Authorize]フィルターがHomeControllerのすべてのアクションメソッド(Index1Index2)に適用されますが、他のコントローラーのアクションには影響しません。

グローバルレベル

グローバルレベルのフィルターは、global.asax.csファイルのApplication_Startイベント内で、既定のFilterConfig.RegisterGlobalFilters()メソッドを使って登録します。グローバルフィルターは、アプリケーション内のすべてのコントローラーとアクションメソッドに適用されます。

public class MvcApplication : System.Web.HttpApplication{
    protected void Application_Start(){
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
}
public class FilterConfig{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters){
        filters.Add(new HandleErrorAttribute());
        filters.Add(new AuthorizeAttribute());
    }
}

上記のように登録すると、例外処理を行うHandleErrorAttributeや認証チェックを行うAuthorizeAttributeが、アプリケーション全体に一括して適用されます。

3つのレベルの比較まとめ

レベル適用範囲指定場所
アクションメソッドレベル特定のアクションメソッドのみアクションメソッドの直上
コントローラーレベルそのコントローラーの全アクションメソッドコントローラークラスの直上
グローバルレベルアプリケーション全体FilterConfig.RegisterGlobalFilters()

このように、フィルターの適用範囲は「1つのアクション」「1つのコントローラー」「アプリケーション全体」の3段階で選択できます。認証やエラー処理など、横断的に必要な処理はグローバルレベルで、特定の画面だけに必要な処理はアクションメソッドレベルで適用するなど、適切なレベルを選ぶことで保守性の高いコードになります。

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

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

  2. C# ASP.NET Web APIにおけるコントローラーアクションの4つの戻り値の型とは?

    ASP.NET Web APIのアクションメソッドには、主に以下の4種類の戻り値の型を指定することができます。 void(戻り値なし) プリミティブ型/複合型 HttpResponseMessage IHttpActionResult 1. void(戻り値なし) すべてのアクションメソッドが必ずしも何かを返す必要はありません。戻り値の型としてvoidを指定することも可能です。 コード例 using DemoWebApplication.Models; using System.Web.Http; namespace DemoWebApplication.Controllers {