【问题标题】:Add a default parameter to all actions为所有操作添加默认参数
【发布时间】:2013-09-25 15:42:48
【问题描述】:

我想添加某些方法,并希望在执行任何操作之前执行它们。所以我创建了这个 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(意味着更改我所有操作的签名),我不想这样做。

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

或者有更好的方法吗?

【问题讨论】:

    标签: c# asp.net asp.net-mvc-4 routing action-filter


    【解决方案1】:

    您不必在所有操作中添加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);
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      • 2013-03-23
      • 2013-10-07
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      相关资源
      最近更新 更多