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

本文关键字:过滤器 维护 WebApi 项目 | 更新日期: 2023-09-27 18:14:48

我有一个WebApi项目,我想在其中实现一个维护过滤器。现在,我有一个问题,过滤器被调用了两次。所以我得到了正确的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);
    }
}

问好

[EDIT]这解决了我的问题:

    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);
    }

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

覆盖提供固定响应的OnActionExecuting方法。这样,它就不会继续进行请求处理

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);
    }