代码:
public class TheFilter : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
var controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
}
}
public class NotesController : BaseController
{
[TheFilter]
[HttpPost]
public ActionResult Edit(EditViewModel viewModel)
{
viewModel.Note.Modified = DateTime.Now;
viewModel.Note.ModifiedBy = User.Identity.Name;
var noteTable = StorageHelper.GetTable<Note>(viewModel.PageMeta.DataSourceID);
noteTable.AddOrUpdate(viewModel.Note);
return Home();
}
}
当我在返回Home()上调试并逐步执行时,我绕过动作过滤器并直接进入Home()方法。
我是否正确声明了操作过滤器?
答案 0 :(得分:29)
确保您正在实施
System.Web.Mvc.ActionFilterAttribute
而不是
System.Web.Http.Filters.ActionFilterAttribute
他们都有OnActionExecuting和OnActionExecuted方法,所以它可能有点欺骗。
答案 1 :(得分:2)
也许你没有直接联系方法但是从其他行动中调用编辑动作? 将过滤器放在控制器上,看看会发生什么。
答案 2 :(得分:1)
我也遇到了同样的问题,我只是在OnExecuting方法之前缺少 override 关键字。添加替代关键字后,它开始工作。
答案 3 :(得分:-3)
使用Onexecuting not onExecucuted
public override void OnActionExecuting(ActionExecutingContext filterContext)