0

我需要能够处理整个站点的查询字符串参数(例如 ?promo=38 )。我正在尝试此处指定的过程将 {sitename} 参数传递给 MVC 控制器操作,但它不起作用。我猜这是因为根据http://blog.stevensanderson.com/2007/11/20/aspnet-mvc-pipeline-lifecycle/查询字符串处理发生在控制器实例化之后。

那么实现我想要的简单方法是什么?即,能够从我站点中任何位置的查询字符串参数执行诸如设置基本控制器属性或设置会话变量之类的操作,而无需在所有控制器操作中手动指定某些内容?

4

1 回答 1

3

按照@jrummell 的建议,覆盖OnActionExecuting()您的基本控制器或动作过滤器。一个动作过滤器可能是要走的路,但你仍然需要装饰你的所有控制器或创建一个基本控制器并用它来装饰它。

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 ...
}    
于 2013-04-01T19:57:08.573 回答