代码之家  ›  专栏  ›  技术社区  ›  cfitzarl

ASP.NET MVC 2中的父控制器类

  •  1
  • cfitzarl  · 技术社区  · 14 年前

    我一直在研究一个相当大的Web应用程序,它需要在URL中为访问的每个页面(例如,/controller/action/id)指定一个ID参数。账户ID=23235325)。每次有人访问页面时都必须验证此ID。

    我想尽可能减少代码复制,想知道是否有一种方法可以在继承MVC控制器的控制器中使用init方法或构造函数,然后让其他控制器扩展该控制器。

    我正在使用ASP.NET MVC 2。

    1 回复  |  直到 14 年前
        1
  •  4
  •   Omar    14 年前

    是的,这可以使用所有控制器继承的基本控制器类,也可以通过创建一个自定义属性来装饰控制器。

    基本控制器:

    public class BaseController : Controller
    {
    
       protected override void Initialize(System.Web.Routing.RequestContext requestContext)
       {
           // verify logic here
       }
    }
    

    您的控制器:

    public class AccountController : BaseController
    {
          // the Initialize() function will get called for every request
          // thus running the verify logic
    }
    

    自定义授权属性:

    public class AuthorizeAccountNumberAttribute : AuthorizationAttribute
    {
        protected override AuthorizationResult IsAuthorized(System.Security.Principal.IPrincipal principal, AuthorizationContext authorizationContext)
        {
               // verify logic here
        }
    }
    

    在控制器上:

    [AuthorizeAccountNumber]
    public class AccountController : Controller
    {
          // the IsAuthorized() function in the AuthorizeAccountNumber will 
          // get called for every request and thus the verify logic
    }
    

    您可以将这两种方法结合起来,使用 [AuthorizeAccountNumber] 需要验证的控制器从中继承。