我使用web api / mvc 5并尝试停止任何其他端点一段时间。是否可以为基于ActionFilterAttribute的全局过滤器执行此操作?
public override void OnActionExecuting(HttpActionContext filterContext)
{
bool isSystemShutdown = _systemService.isSystemShutdownScheduled();
if (isSystemShutdown == true)
{
return;
}
base.OnActionExecuting(filterContext);
}
答案 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代码。