Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET-MVC应用程序是否有类似“更新时间”的内容?_C#_Asp.net Mvc_Http Caching_Http Status Code 304 - Fatal编程技术网

C# ASP.NET-MVC应用程序是否有类似“更新时间”的内容?

C# ASP.NET-MVC应用程序是否有类似“更新时间”的内容?,c#,asp.net-mvc,http-caching,http-status-code-304,C#,Asp.net Mvc,Http Caching,Http Status Code 304,我的网站返回从磁盘获取的项目信息,这些项目涉及控制器中的一些逻辑,因此它不仅仅是静态资产。我试图通过为未更改的项目返回304,为相应的项目获取文件写入时间来优化它。现在,在我更新代码之后,我的应用程序仍然认为某个项目没有更新,并返回304-它没有意识到应用程序代码已更改,因此结果会有所不同。正因为如此,用户只有在清除缓存后才能立即看到更新。我想通过检查“项目更新时间”和“应用程序更新时间”来解决这个问题。有没有一种方法可以获得应用程序更新的时间?此时,我希望看到所有应用程序文件的最大更新时间 U

我的网站返回从磁盘获取的项目信息,这些项目涉及控制器中的一些逻辑,因此它不仅仅是静态资产。我试图通过为未更改的项目返回304,为相应的项目获取文件写入时间来优化它。现在,在我更新代码之后,我的应用程序仍然认为某个项目没有更新,并返回304-它没有意识到应用程序代码已更改,因此结果会有所不同。正因为如此,用户只有在清除缓存后才能立即看到更新。我想通过检查“项目更新时间”和“应用程序更新时间”来解决这个问题。有没有一种方法可以获得应用程序更新的时间?此时,我希望看到所有应用程序文件的最大更新时间

UPD: 如示例代码所示,以下是稍微简化的版本:

    public static DateTime? LastKnownDate(this HttpRequestBase request)
    {
        if (!string.IsNullOrEmpty(request.Headers["If-Modified-Since"]))
        {
            var provider = CultureInfo.InvariantCulture;
            DateTime date;
            if (DateTime.TryParse(
                request.Headers["If-Modified-Since"],
                provider,
                DateTimeStyles.RoundtripKind,
                out date)) return date;
        }
        return null;
    }

    public ActionResult Test(int id)
    {
        var path = @"C:\data\" + id;
        var file = new FileInfo(path);
        if (!file.Exists) return HttpNotFound();
        var date = Request.LastKnownDate();
        if (date != null && date >= file.LastWriteTimeUtc)
        {
            return Response.NotModified();
        }

        Response.AddHeader("Last-Modified", file.LastWriteTimeUtc.ToString("o"));
        return File(path, "application/octet-stream");
    }

我想你需要像这样的东西。更多详情请参阅

以下是在ASP.NET中执行此操作的方法:


也可以在以下网址获取战利品:

感谢您的帮助。条件get正是我使用的。我想我没有很好地描述我的问题,所以我更新了这个问题…用户代理是从服务器获取了一个真正的304,还是伪造了一个,因为他们认为本地缓存副本仍然有效,并在不查询服务器的情况下返回该副本?@Albireo,很有趣。。。你知道chrome是否会冒充304吗?我正在使用服务器的在线版本进行测试,没什么特别的…@Albireo,无论如何Fiddler会向服务器显示请求。。。因此,我认为这些请求是真实的:你能添加一个关于如何设置和返回304的信息吗?@Albireo补充道。现在我使用的是linux方式:添加了一个“重置”文件,每个“可缓存”请求都会检查该文件。当我更新数据时,我“触摸”了这个文件。