我想使用ASP.NET MVC 5.0创建服务器监控应用程序。 如果服务器不可用,我想返回HTTP 503状态代码以及带有服务器状态详细信息的Json内容。此外,我想使用ASP.NET输出缓存将此响应缓存特定的持续时间(例如10秒)。
我面临的问题是ASP.NET MVC 5.0中的OutputCache过滤器在状态代码为HTTP 200时有效,但在HTTP 503时无效。以下是我在我的应用程序中使用的MVC操作的示例代码。
HTTP 200以外的HTTP状态代码是否不可缓存?是否有任何替代机制通过输出缓存或任何IIS设置缓存HTTP 503响应?
[OutputCache(Duration = 10, VaryByParam = "*")]
public ActionResult GetServerStatus(string serverId)
{
var serverStatus = .... //JSON object
if(serverStatus.IsAvailable)
{
this.Response.StatusCode = (int)HttpStatusCode.OK;
}
else
{
this.Response.StatusCode = (int)HttpStatusCode.ServiceUnavailable;
}
return Json(serverStatus);
}
答案 0 :(得分:1)
据我所知,OutputCache只缓存有效的响应。我快速挖掘了源代码,我看不出任何明显的方法来覆盖这种行为。
我想最简单的答案就是自己缓存服务器状态。
类似的东西:
public ActionResult GetServerStatus(string serverId)
{
string serverStatus = Cache["someKey"];
if(serverStatus == null)
{
serverStatus = ...;
// Use Cache.Insert for setting duration etc
Cache["someKey"] = serverStatus;
}
if(serverStatus.IsAvailable)
{
this.Response.StatusCode = (int)HttpStatusCode.OK;
}
else
{
this.Response.StatusCode = (int)HttpStatusCode.ServiceUnavailable;
}
return Json(serverStatus);
}
应该做的伎俩。如果你在搜索SO周围,你会发现一些有用的缓存包装器,这使得插入和检索有点“更好”。