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);
    }

}

如您所见,我想检查用户是否在 URL 中请求了促销 ID。问题是,为了让它工作,我必须为promotionId我的所有操作添加一个参数(意味着更改我所有操作的签名),我不想这样做。

有没有办法覆盖默认操作方法并向其添加可选参数,以便将其添加到我的所有操作中?

还是有更好的方法来做到这一点?

4

1 回答 1

0

您不必promotionId在所有操作中添加参数。Request您可以使用控制器的属性检查 url 是否具有此参数。

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);
    }

}
于 2013-09-20T10:44:24.413 回答