我在服务器上动态创建包含已翻译字符串的javascript文件。 当我查看chrome检查器时,此文件永远不会被缓存,(Scripts文件夹中的其他实际JS文件会被缓存) * 为什么不是? *
<script src="somepath/Scripts/translate-nl-BE.js"></script>
or
<script src="somepath/Scripts/translate-en-GB.js"></script>
这映射到以下MVC操作:
[HttpGet]
public ActionResult TranslateJS(string culturecode) {
ViewBag.JSCulture = culturecode;
Response.ContentType = "text/javascript";
return PartialView("TranslateJS");
}
这是观点:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<%
string culturecode = ViewBag.JSCulture;
%>
var translations = <%=new System.Web.Script.Serialization.JavaScriptSerializer().Serialize((ViewBag.Translate as List<ERPManager.TranslationService.FlatTranslation>).Where(x=>x.CultureCode==culturecode).ToDictionary(t=>t.Key,f=>f.Value)) %>;
这基本上只是序列化一个json数组(我知道这看起来不仅仅是返回一个jsonresult而且我不能ajax调用这个文件,它需要sto被链接到一个脚本标记
这是我从服务器获得的响应:
Cache-Control:private
Content-Length:10987
Content-Type:text/javascript; charset=utf-8
Date:Thu, 04 Apr 2013 10:15:11 GMT
Server:Microsoft-IIS/7.5
X-AspNet-Version:4.0.30319
X-AspNetMvc-Version:3.0
X-Powered-By:ASP.NET
这里是返回的文件的预览:它基本上只是翻译的关键值字典。
var translations = {"vertaald":"Vertaald","gerelateerd":"Gerelateerd","details":"Details"};
答案 0 :(得分:2)
听起来你想要的是expires
HTTP header
您可以在MVC代码中设置:
[HttpGet]
public ActionResult TranslateJS(string culturecode) {
ViewBag.JSCulture = culturecode;
Response.ContentType = "text/javascript";
Response.Expires = (60*24);//24 hours
return PartialView("TranslateJS");
}
请记住,如果您设置了过期标头 浏览器将不会再次请求文件,直到缓存的内容“过期” 。请谨慎使用!