19

ASP.NET MVC 3.0、IIS 7、.NET 4

我有一个操作返回很少更改的数据(几乎是静态的)。

有没有简单的方法:

  1. 从操作中返回 304“未修改”;
  2. 在响应中包含“Last-Modified”时间戳。

return Content('my data');用于动作结果。

基本上我想要一个简单的方法来做这篇文章中谈到的事情:http ://weblogs.asp.net/jeff/archive/2009/07/01/304-your-images-from-a-database.aspx

4

3 回答 3

16

(非常!)迟到的答案,但这个问题在搜索引擎结果的顶部附近弹出,因此它可能对未来登陆这里的人有用。

第 1 部分的替代方案:

return new HttpStatusCodeResult(304, "Not Modified");
于 2012-09-20T21:36:30.500 回答
10

这对304有什么问题?

        Response.StatusCode = 304;
        Response.StatusDescription = "Not Modified";
        return Content(String.Empty);

这对于 LastModified:

        Response.Cache.SetLastModified(DateTime.Now);

或者也许只是创建一个“未修改”过滤器

于 2011-04-27T20:38:30.047 回答
1

使用提供的材料,您可以在控制器中构建一个小实用功能

protected bool CheckStatus304(DateTime lastModified)
{
    //http://weblogs.asp.net/jeff/304-your-images-from-a-database
    if (!String.IsNullOrEmpty(Request.Headers["If-Modified-Since"]))
    {
        CultureInfo provider = CultureInfo.InvariantCulture;
        var lastMod = DateTime.ParseExact(Request.Headers["If-Modified-Since"], "r", provider).ToLocalTime();
        if (lastMod == lastModified.AddMilliseconds(-lastModified.Millisecond))
        {
            Response.StatusCode = 304;
            Response.StatusDescription = "Not Modified";
            return true;
        }
    }

    Response.Cache.SetCacheability(HttpCacheability.Public);
    Response.Cache.SetLastModified(lastModified);

    return false;
}

然后像这样使用它:

if (CheckStatus304(image.CreatedDate)) return Content(string.Empty);
于 2016-08-26T09:00:23.060 回答