javascript - 允许 MVC 将 Controller 操作响应视为静态内容

标签 javascript css asp.net-mvc asp.net-mvc-3

我有一个单页 JavaScript 应用程序,位于 ASP.NET MVC 3 网站内。

为了缓存应用程序使用的 JS/CSS 文件,而不需要每次进行更改时手动重命名文件,我有以下路由和相应的 Controller 操作来提供静态文件。

Global.asax.cs

routes.MapRoute(
    "AppCssFile",
    "style.{version}.min.css",
    new { controller = "StaticFile", action = "CssFile" }
);

routes.MapRoute(
    "AppJsFile",
    "app.{version}.min.js",
    new { controller = "StaticFile", action = "JsFile" }
);

静态文件 Controller

//NB: m_JsAppFolder references below just point to the root folder for static files

[HttpGet]
public FileResult CssFile()
{
    var sourceFile = HttpContext.Server.MapPath(Path.Combine(m_JsAppFolder, "assets", "style", "release.css"));
    return new FilePathResult(sourceFile, "text/css");
}

[HttpGet]
public FileResult JsFile()
{
    var sourceFile = HttpContext.Server.MapPath(Path.Combine(m_JsAppFolder, "release.js"));
    return new FilePathResult(sourceFile, "text/javascript");
}

这工作得很好,但是问题是我的Cache-Control header 没有返回我期望的值...

因为我的 Web.config 中有以下内容:

...
<urlCompression doStaticCompression="true" />
<staticContent>
    <!-- Set expire headers to 1 year for static content-->
<clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" />
<!-- use utf-8 encoding for anything served text/plain or text/html -->
<remove fileExtension=".css" />
<mimeMap fileExtension=".css" mimeType="text/css" />
<remove fileExtension=".js" />
<mimeMap fileExtension=".js" mimeType="text/javascript" />
</staticContent>
...

我希望看到 Cache-Control:public,max-age=31536000 的 Cache-Control header ,就像直接引用 CSS/JS 文件一样,而不是通过 Controller 操作。

是否有办法让 MVC 将 Controller 操作响应视为 staticContent:我真的不想在 Controller 中手动设置 Cache-Control header ,因为这意味着此设置和 Web.config 中的设置可能会不同步。

最佳答案

您在寻找 OutputCacheAttribute

这样,您就可以使用属性“持续时间”和“位置”将结果缓存在服务器和客户端中。

关于javascript - 允许 MVC 将 Controller 操作响应视为静态内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9700120/

相关文章:

javascript - 查询。面对点击事件的问题

c# - HttpCacheability.NoCache 和 HttpCacheability.ServerAndNoCache 之间有什么区别?

asp.net-mvc - 日期时间格式全局更改

c# - View 中的 2 个按钮在 asp.net mvc 中执行不同的操作

javascript - 在移动设备中使用 document.execCommand ('copy' )

javascript - Mongoose 保存子文档数组

javascript - 在 JavaScript 中访问数据库值

html - 使用 CSS,如何在同一基线上对齐较小的文本?

javascript - 模型之间的 Mongoose 关系

html - 除了水平缩放之外,我可以垂直缩放 div 及其内容吗?