ASP.NET MVC OutputCache с действиями контроллера POST

Я новичок в использовании атрибута OutputCache в ASP.NET MVC.


Статические страницы

Я включил его на статических страницах своего сайта с помощью следующего кода:

[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? Кроме того, в моей форме есть CAPTCHA; изменит ли это что-нибудь в уравнении?

Другими словами, как лучше всего подойти к кэшированию динамических страниц?

Заранее спасибо.


person Maxim Zaslavsky    schedule 30.05.2010    source источник
comment
Здесь есть хорошая статья о подстановке после кэширования: http://www.asp.net/mvc/tutorials/adding-dynamic-content-to-a-cached-page-cs Я думаю, это то, что вы ищете.   -  person philiphobgen    schedule 30.05.2010


Ответы (1)


Воспользовавшись кэшированием вывода, вы можете значительно повысить производительность приложения ASP.NET MVC. Вместо повторной генерации страницы каждый раз, когда запрашивается страница, страницу можно создать один раз и кэшировать в памяти для нескольких пользователей.

Первый сценарий, который вы собираетесь реализовать, не является правильным. Имейте в виду, что кеш вывода следует использовать только в то время, когда он не влияет на вашу бизнес-логику. Вы хотели уменьшить серьезную нагрузку и данные Sql. Извлечение часто используемых страниц, но менее частое обновление данных.

К счастью, есть простое решение. Вы можете воспользоваться функцией платформы ASP.NET, которая называется подстановкой после кэширования. Подстановка после кэширования позволяет заменить динамический контент на странице, которая была кэширована в памяти.

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

person Kaushik Thanki    schedule 25.06.2015