我想添加某些方法,我希望在执行任何操作之前执行它们。所以我创建了这个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);
}
}
如您所见,我想检查用户是否在网址中请求了促销ID。问题是,为了使其正常工作,我必须为我的所有操作添加参数promotionId
(意味着更改我所有操作的签名),我不想这样做。
有没有办法覆盖默认操作方法并为其添加可选参数,以便将其添加到我的所有操作中?
或者有更好的方法吗?
答案 0 :(得分: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);
}
}