ASP.NET MVC的OutputCache与POST控制器操作

6

我对在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...

    }
}

如果我将OutputCache应用到整个控制器上,会发生什么?这里呢?
HTTP POST表单提交会工作吗?另外,我的表单有验证码;这会改变方程中的任何内容吗?
换句话说,如何处理具有动态页面的缓存是最佳方式?
提前感谢。

这里有一篇关于后缓存替换的好文章:http://www.asp.net/mvc/tutorials/adding-dynamic-content-to-a-cached-page-cs 我认为这正是你要找的。 - philiphobgen
1个回答

1
通过利用输出缓存,您可以显著提高ASP.NET MVC应用程序的性能。页面不需要每次请求时都重新生成,而是可以生成一次并在内存中缓存多个用户。
首先,您要实现的方案不当。记住,只有在不影响业务逻辑的情况下才应使用输出缓存。您想要减少服务器负载和经常使用但更新较少的数据检索。
幸运的是,有一个简单的解决方案。您可以利用ASP.NET框架的一个功能,称为后缓存替换。后缓存替换使您可以替换已在内存中缓存的页面中的动态内容。

http://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/adding-dynamic-content-to-a-cached-page-cs


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接