创建自定义基本控制器以捕获查询字符串值。是好是坏?

时间:2012-08-13 17:36:27

标签: c# asp.net-mvc asp.net-mvc-3


这个问题基本上是要知道并证明我所做的是一个好的做法,还是有其他方法可以解决问题。
这是问题....

*我有一个MVC应用程序,有许多控制器和操作方法。客户将从不同来源(谷歌,bing,第三方网站)访问不同的操作方法,最后添加查询字符串签名。

*因为我不想在控制器的每个动作中检查查询字符串值。我创建了一个新的控制器“BaseController.cs”,它继承自MVC Controller类。并实现以下代码。所有应用程序控制器都将继承BaseController。

    public class BaseController : Controller
    {
       public BaseController():base()
       { 
            string siteReference = HttpContext.Request["ref"];
       }
    }


我要求MVC的专家建议更好的方法。提前谢谢。

-kk

1 个答案:

答案 0 :(得分:3)

执行此操作的方法较少,您可以使用全局操作过滤器来执行相同操作,而无需使用基本控制器,并且您更喜欢组合而不是继承。

  public class GetQueryString: IActionFilter, IMvcFilter
    {

        public void OnActionExecuting(ActionExecutingContext filterContext)
        {
            string siteReference = filterContext.HttpContext.Request["ref"];
        }


        public void OnActionExecuted(ActionExecutedContext filterContext)
        {

        }


        public bool AllowMultiple
        {
            get { return false; }
        }

        public int Order
        {
            get { return Filter.DefaultOrder; }
        }
    }