如何在一段时间内阻止webapi端点

时间:2017-09-01 00:02:18

标签: asp.net-mvc asp.net-web-api asp.net-web-api2

我使用web api / mvc 5并尝试停止任何其他端点一段时间。是否可以为基于ActionFilterAttribute的全局过滤器执行此操作?

public override void OnActionExecuting(HttpActionContext filterContext)
{
    bool isSystemShutdown = _systemService.isSystemShutdownScheduled();
    if (isSystemShutdown == true)
    {
        return;
    }
    base.OnActionExecuting(filterContext);
}

1 个答案:

答案 0 :(得分:3)

你应该回复一个回复。根据需要将filterContext的Response属性设置为有效响应。

我在这里返回200 OK。您可以更新它以返回您想要的任何内容(自定义数据/消息等)

public override void OnActionExecuting(HttpActionContext filterContext)
{
    bool isSystemShutdown = _systemService.isSystemShutdownScheduled();
    if (isSystemShutdown)
    {
        var r= new HttpResponseMessage(HttpStatusCode.OK);
        filterContext.Response = r;
        return;
    }
    base.OnActionExecuting(filterContext);
}

现在,您可以在Application_Start <{1}} global.asax.cs事件中全局注册

GlobalConfiguration.Configuration.Filters.Add(new YourFilter());

如果要将消息指定回调用者代码,则可以执行此操作。

public override void OnActionExecuting(HttpActionContext filterContext)
{
    bool isSystemShutdown = _systemService.isSystemShutdownScheduled();
    if (isSystemShutdown)
    {
        var s = new { message = "System is down now" };
        var r= filterContext.Request.CreateResponse(s);
        filterContext.Response = r;
        return;
    }
    base.OnActionExecuting(filterContext);
}

这将返回如下所示的JSON结构,其中包含200 OK响应代码。

{"message":"System is down now"}

如果要发送不同的响应状态代码,可以根据需要将filterContext.Response.StatusCode属性值设置为HttpStatus代码。