Класс родительского контроллера в ASP.NET MVC 2 - PullRequest
1 голос
/ 26 июля 2010

Я работал над довольно большим веб-приложением, которое требует определенного параметра id в URL для каждой посещенной страницы (например, / controller / action / id? AccountId = 23235325).Этот идентификатор должен проверяться каждый раз, когда кто-то посещает страницу.

Я хочу максимально сократить репликацию кода, и мне было интересно, есть ли способ использовать метод или конструктор init в контроллере, который наследует контроллер MVC, и затем расширить этот контроллер другими.

Я использую ASP.NET MVC 2.

1 Ответ

4 голосов
/ 26 июля 2010

Да, это возможно, используя базовый класс контроллеров, который наследуют все ваши контроллеры, или создав пользовательский атрибут, которым вы украшаете свой контроллер.

Базовый контроллер:

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], от которого наследуются ваши контроллеры, требующие проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...