如何拦截过滤链以便在WebApi项目中进行维护

时间:2016-10-24 09:07:31

标签: c# asp.net-web-api unity-container action-filter

我有一个WebApi项目,我想在其中实现一个maintenancefilter。 现在,我有问题,过滤器被调用两次。所以我得到了正确的http状态代码,但是过滤器没有拦截,通常会调用受控制的方法。

我必须做的是,我的过滤器是否正确拦截而没有调用其他方法?

public class MaintenanceFilter : ActionFilterAttribute
{
    [Dependency]
    public IUaCRepository UaC { get; set; }

    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        base.OnActionExecuting(actionContext);
    }

    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
    {
        if (UaC != null && UaC.CheckMaintenance(WebApiConfig.CONFIG_STANDARD))
        {
            var response = actionExecutedContext.Response;
            response.StatusCode = HttpStatusCode.ServiceUnavailable;

            return;
        }
        base.OnActionExecuted(actionExecutedContext);
    }
}

最好的问候

[编辑]这解决了我的问题:

    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        if (UaC != null && UaC.CheckMaintenance(WebApiConfig.CONFIG_STANDARD))
        {
            actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.ServiceUnavailable, "Maintenance");

            return;
        }
        base.OnActionExecuting(actionContext);
    }

1 个答案:

答案 0 :(得分:1)

覆盖提供固定响应的[Ss]uc{1,}es{1,}ful{1,} 方法。通过这种方式,它不会继续处理请求

[Ss]uc+es+ful+