C# 具有后期控制器操作的ASP.NET MVC OutputCache

C# 具有后期控制器操作的ASP.NET MVC OutputCache,c#,asp.net,asp.net-mvc,caching,outputcache,C#,Asp.net,Asp.net Mvc,Caching,Outputcache,我对在ASP.NET MVC中使用OutputCache属性相当陌生 静态页面 我已在网站的静态页面上启用了它,代码如下: [OutputCache(Duration = 7200, VaryByParam = "None")] public class HomeController : Controller { public ActionResult Index() { //... 如果我理解正确,我将整个控制器缓存了7200秒(2小时) 动态页面 但是,

我对在ASP.NET MVC中使用
OutputCache
属性相当陌生


静态页面 我已在网站的静态页面上启用了它,代码如下:

[OutputCache(Duration = 7200, VaryByParam = "None")]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        //...
如果我理解正确,我将整个控制器缓存了7200秒(2小时)


动态页面 但是,它如何处理动态页面?所谓动态,我指的是用户必须提交表单的地方

例如,我有一个带有电子邮件表单的页面。下面是该代码的外观:

public class ContactController : Controller
{
    //
    // GET: /Contact/

    public ActionResult Index()
    {
        return RedirectToAction("SubmitEmail");
    }

    public ActionResult SubmitEmail()
    {
        //In view for CAPTCHA: <%= Html.GenerateCaptcha() %>
        return View();
    }

    [CaptchaValidator]
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult SubmitEmail(FormCollection formValues, bool captchaValid)
    {
        //Validate form fields, send email if everything's good...

            if (isError)
            {
                return View();
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }

    }

    public void SendEmail(string title, string name, string email, string message)
    {
        //Send an email...

    }
}
公共类ContactController:控制器
{
//
//获取:/Contact/
公共行动结果索引()
{
返回重定向到操作(“提交邮件”);
}
公共行动结果提交邮件()
{
//查看验证码:
返回视图();
}
[验证程序]
[接受动词(HttpVerbs.Post)]
公共操作结果提交邮件(FormCollection formValues,bool captchaValid)
{
//验证表单字段,如果一切正常,发送电子邮件。。。
如果(isError)
{
返回视图();
}
其他的
{
返回重定向到操作(“索引”、“主页”);
}
}
public void sendmail(字符串标题、字符串名称、字符串电子邮件、字符串消息)
{
//发送电子邮件。。。
}
}
如果我将OutputCache应用于整个控制器,会发生什么情况

HTTP POST表单提交是否有效?而且,我的表格有验证码;这会改变等式中的任何东西吗

换句话说,使用动态页面进行缓存的最佳方法是什么


提前感谢。

通过利用输出缓存,您可以显著提高ASP.NET MVC应用程序的性能。与每次请求页面时都重新生成页面不同,页面可以生成一次并缓存在内存中供多个用户使用

您要实现的第一个场景是不正确的。请记住,输出缓存只应在不影响业务逻辑的情况下使用,您希望减少服务器负载&对常用页面的Sql数据检索,但更新数据的频率较低

幸运的是,有一个简单的解决方案。您可以利用ASP.NET框架中称为后期缓存替换的功能。后期缓存替换使您能够替换已缓存在内存中的页面中的动态内容


这里有一篇关于缓存后替换的好文章:我想这就是你要找的。