ASP.NET MVC: Ускоритель для IE или свой ActionResult вместо GenericHandler.ashx

ru-RU | создано: 05.09.2012 | опубликовано: 05.09.2012 | обновлено: 01.01.2018 | просмотров за всё время: 4764

Помнится, не так давно я публиковал статью, где рассказал как "сделать ускоритель для IE на основе GenericHandler.ashx". Речь на тот момент шла о простом ASP.NET. В этой статье покажу как сделать это для сайта ASP.NET MVC.

История одного проекта

После того как проект calabonga.com сменил свой движок на MVC (свидетелями чего стали читатели цикла статей “История одного проекта”), мне до сих пор приходится доводить до ума проект возвращая ему былой функционал. На этот раз ускоритель Share контента. Эта статья продолжение предыдущей версии для ASP.NET.

Проще пареной репы

Для того чтобы реализовать тоже самое но только теперь для ASP.NET MVC следует создать новый класс LentaResult, унаследовав его от ActionResult:

public class LentaResult : ActionResult {
    private readonly ILentaRepository lentaRepository;

    public LentaResult(ILentaRepository lentas) {
        this.lentaRepository = lentas;
    }

    public override void ExecuteResult(ControllerContext context) {
        string content = string.Empty;
        HttpRequestBase request = context.HttpContext.Request;
        if (request.QueryString["content"] != null) {
            content = request.QueryString["content"].ToString();
        }
        if (!string.IsNullOrEmpty(content)) {
            Lenta lenta = new Lenta();
            lenta.Content = content;
            lenta.CreatedAt = System.DateTime.Now;
            lenta.HallId = 7;
            lenta.VoteCount = 0;
            lentaRepository.InsertOrUpdate(lenta);
            lentaRepository.Save();
            HttpContext.Current.Response.Redirect("~/");
        }
    }
}

В контролере еще проще

Просто надо вызвать метод и вернуть как результат LentaResult:

public LentaResult PostToLenta() {
     return new LentaResult(lentaRepository);
}

Как заключение

Далее достаточно поменять пути в файле LentaIE.xml и обновить код установки ускорителя.