我如何安排将我的favicon缓存在MVC3中?

时间:2012-05-18 14:27:36

标签: asp.net-mvc asp.net-mvc-3

我已将.ico和.png文件放在/Content/Ico文件夹中,我的_layout.cshtml中有以下内容

<!-- Favicon -->
<link rel="shortcut icon" type="image/x-icon" href="/Content/Ico/favicon.ico">
<link rel="icon" type="image/png" href="/Content/Ico/tick-circle.png">

a)我有什么方法可以指定这些favicons的缓存时间吗?我应该在/ Content文件夹中使用某种web.config文件吗?

b)我的部分代码使用语法"<link href="@Url.Content("~/Content/ ...我应该使用@Url.Content吗?使用它和在href中指定/Content之间的区别是什么?

1 个答案:

答案 0 :(得分:5)

a)您可以通过服务器端控制器操作为favicon提供服务,在该操作中,您可以通过使用[OutputCache]属性进行装饰来指定应缓存的时间:

[OutputCache(Duration = 3600, Location = OutputCacheLocation.Client)]
public ActionResult Favicon()
{
    var icon = Server.MapPath("~/content/ico/favicon.ico");
    return File(icon, "image/x-icon");
}

然后:

<link rel="shortcut icon" type="image/x-icon" href="@Url.Action("Favicon", "SomeController")" />

b)始终使用@Url.Content("~/content/...")而不是/content/...来指定静态文件的相对路径。原因是Url.Content帮助程序考虑了虚拟目录名称,即使将其部署到IIS中的虚拟目录中,您的站点也将继续工作。如果您对此/content/...这样的网址进行硬编码,它将在本地运行,但一旦您在IIS中发布它将不再有效,因为现在正确的位置是/yourappname/content/...,这是Url.Content帮助程序所考虑的。