ASP.NET MVC OutputCache с действиями контроллера POST - PullRequest
5 голосов
/ 30 мая 2010

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

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

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

1 Ответ

1 голос
/ 25 июня 2015

Используя преимущества кэширования вывода, вы можете значительно повысить производительность приложения 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

...