2013-09-20 5 views
1

Я хочу добавить определенные методы, и я хочу, чтобы они выполнялись перед выполнением каких-либо действий. Так что я создал эту BaseController, из которого все мои контроллеры будут наследоватьДобавить параметр по умолчанию для всех действий

public class BaseController : Controller 
{ 
    protected int promotionId = 0; 

    protected override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     bool thereIsPromo = false; 
     if (filterContext.ActionParameters.Keys.Contains("promotionId")) 
     { 
      thereIsPromo = true; 
     } 

     var foo = filterContext.RouteData; 
     // TODO: use the foo route value to perform some action 

     base.OnActionExecuting(filterContext); 
    } 

} 

Как вы можете видеть, что я хочу, чтобы проверить, если пользователь запросил продвижение Id в URL. Проблема заключается в том, что для того, чтобы получить эту работу, я должен добавить параметр promotionId ко всем моим действиям (что означает изменение подписи всех моих действий), и я не хочу этого делать.

Есть ли способ переопределить метод действия по умолчанию и добавить к нему необязательный параметр, чтобы он был добавлен ко всем моим действиям?

Или есть лучший способ сделать это?

ответ

0

Вам не нужно добавлять параметр promotionId во все ваши действия. Вы можете проверить, имеет ли url этот параметр, используя свойство Request вашего контроллера.

public class BaseController : Controller 
{ 
    protected int promotionId = 0; 

    protected override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     bool thereIsPromo = false; 

     // Check if the request has the paramter PromotionId 
     if (Request.Params.AllKeys.Contains("promotionId")) 
     { 
      promotionId = int.Parse(Request["promotionId"]); 
      thereIsPromo = true; 
     } 

     var foo = filterContext.RouteData; 
     // TODO: use the foo route value to perform some action 

     base.OnActionExecuting(filterContext); 
    } 

} 
Смежные вопросы