MVC ActionFilterAttribute始终触发

时间:2016-03-23 19:38:34

标签: asp.net-mvc action-filter

我有followin属性。

我需要这样做:

  1. filterContext.Result中向浏览器返回一条消息(我想它就是那个地方)
  2. 能够停止正在执行的行动
  3. 但是,在启动debuggind过程之后,调试器会在OnActionExecuting方法内部执行,我看到错误而不是我的页面。我以为它会在SearchItems方法之前执行 - 为什么会这样?

    public class MyAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            bool isValid = false; //some logic here
    
            if (!isValid)
            {
                filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.PaymentRequired;
    
                filterContext.Result = new EmptyResult();
    
                return;
            }
    
            base.OnActionExecuting(filterContext);
        }
    }
    

    的global.asax

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new MyAttribute());
        filters.Add(new HandleErrorAttribute());
    }
    

    控制器:

    public class MainApiController : ApiController
    {
        [MyAttribute]
        [HttpPost]
        public HttpResponseMessage SearchItems()
        {
            ...
        }
    }
    

2 个答案:

答案 0 :(得分:0)

而不是EmptyResult(),你应该

            filterContext.Result = new RedirectResult("/YourRedirect");

            filterContext.Result = new ViewResult { ViewName = "~/Views/Shared/PaymentRequired.cshtml" };

答案 1 :(得分:0)

我找到了解决方案,结果发现使用的名称空间不正确

而不是

context[indexPath.row] is MyClass

我用过:

public override void OnActionExecuting(ActionExecutingContext filterContext)

现在它按预期工作。