【问题标题】:MVC ActionFilterAttribute fires all the timeMVC ActionFilterAttribute 一直触发
【发布时间】:2016-03-23 19:38:33
【问题描述】:

我有以下属性。

我需要做的:

  1. 在filterContext.Result 中向浏览器返回一条消息(我想就是在那个地方做)
  2. 能够停止正在执行的操作

但是,在启动调试进程后,调试器进入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()
    {
        ...
    }
}

【问题讨论】:

标签: asp.net-mvc action-filter


【解决方案1】:

你应该代替 EmptyResult()

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

或

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

【讨论】:

    【解决方案2】:

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

    而不是

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    

    我用过:

    public class CustomAttribute : System.Web.Http.Filters.ActionFilterAttribute
    {
        public override void OnActionExecuting(HttpActionContext actionContext)
        {
            if (....) {
                var response = actionContext.Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "some message");
                actionContext.Response = response;
            }
        }
    }
    

    现在它按预期工作了。

    【讨论】:

      猜你喜欢
      • 2015-09-13
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多