我想使用ASP.NET MVC 5.0创建服务器监视应用程序.如果服务器不可用,我想返回HTTP 503状态代码以及带有服务器状态详细信息的Json内容.我也想使用ASP.NET输出缓存在特定持续时间(例如10秒)中缓存此响应.
I want to create a server monitoring application using ASP.NET MVC 5.0. In case the server is unavailable I want to return HTTP 503 status code along with a Json content with details of server state. Also I want to cache this response using ASP.NET Output Cache for specific duration(say 10 seconds).
我面临的问题是,如果状态代码是HTTP 200,则ASP.NET MVC 5.0中的OutputCache过滤器可以工作,而如果HTTP 503,则不能.下面是我在应用程序中使用的MVC操作的示例代码.
The issue I am facing is that OutputCache filter in ASP.NET MVC 5.0 works if status code is HTTP 200 but not if HTTP 503. Following is the sample code for MVC action which I am using in my application.
不是HTTP 200以外的HTTP状态代码是否不可缓存?是否有任何其他机制可以通过Ouput缓存或任何IIS设置来缓存HTTP 503响应?
Are HTTP status code other than HTTP 200 not cacheable? Is there any alternate mechanism to cache HTTP 503 response either through Ouput Cache or any IIS setting?
[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); } 推荐答案据我所知,OutputCache仅缓存有效的响应.我快速浏览了源代码,但看不到任何明显的方式可以替代此行为.
As far as I know OutputCache only caches valid responses. I had a quick dig into the source code and I can't see any obvious way of overriding this behaviour.
我想最简单的答案是自己缓存服务器状态.
I imagine the simplest answer is to cache the server status yourself.
类似的东西:
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进行搜索,您会发现许多有用的Cache包装器,这些包装器可以插入和检索一些尼克尔".
Should do the trick. If you have a search around SO you'll find a number of helpful wrappers for Cache which makes inserting and retrieving a little "nicer".
更多推荐
用于HTTP 503状态代码的ASP.NET MVC OutputCache
发布评论