我需要能够在整个站点中处理查询字符串参数(例如,例如?promo = 38)。我正在尝试此处指定的程序Passing a {sitename} parameter to MVC controller actions,但它无效。我的猜测是因为根据http://blog.stevensanderson.com/2007/11/20/aspnet-mvc-pipeline-lifecycle/查询字符串处理在控制器实例化后发生。
那么什么是完成我想要的简单方法呢?即,能够在我的站点中的任何位置从查询字符串参数设置基本控制器属性或设置会话变量,而不必在所有控制器操作中手动指定某些内容吗?
答案 0 :(得分:3)
根据@jrummell的建议,覆盖OnActionExecuting()
您的基本控制器或Action Filter。操作过滤器可能是要走的路,但您仍然需要装饰所有控制器或创建一个基本控制器并用它来装饰它。
public class PromoActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.Controller.ViewBag.Promo = filterContext.HttpContext.Request.QueryString("Promo");
base.OnActionExecuting(filterContext);
}
}
[PromoActionFilter]
public class BaseController : Controller
{
... Some Actions ...
}