ASP.Net MVC2 (RTM) прерывает фильтрацию ответов - «Фильтрация не разрешена» - PullRequest
6 голосов
/ 06 апреля 2010

Я только что выполнил тестовый прогон обновления проекта до ASP.Net MVC 2 (RTM) в ожидании полного официального релиза .Net 4.0, который выйдет позже в этом месяце.

Наше приложение использует минимизатор для нашего CSS и javascript. Для этого используется свойство HttpResponse.Filter для установки пользовательского фильтра.

При обновлении установщик для этого свойства выдает HttpException, говорящее «Фильтрация не разрешена». Смотря на то, что свойство HttpResponse.Filter в отражателе показывает это:

  set
    {
        if (!this.UsingHttpWriter)
        {
            throw new HttpException(SR.GetString("Filtering_not_allowed"));
        }

...

private bool UsingHttpWriter
{
    get
    {
        return ((this._httpWriter != null) && (this._writer == this._httpWriter));
    }
}

Очевидно, что что-то изменилось в способе записи HttpResponse в выходной поток в MVC2. Кто-нибудь знает, что это за изменение, или хотя бы обходной путь для этого?

РЕДАКТИРОВАТЬ: Это кажется довольно радикальным. Некоторые дальнейшие исследования показывают, что ASP.Net MVC 2 RTM использует System.Web.Mvc.ViewPage.SwitchWriter в качестве свойства Output HttpResponse, тогда как MVC 1 использовал простой старый HttpWriter. Это объясняет, почему возникает исключение.

Но это не объясняет, почему они решили полностью нарушить эту функциональность. Эта тема , кажется, указывает на то, что это просто временно ... но это заставляет меня нервничать ... в конце концов, это RTM.

Любые дальнейшие комментарии приветствуются.

1 Ответ

3 голосов
/ 08 апреля 2010

Представления в MVC, в отличие от обычных страниц .aspx, должны рассматриваться как системы шаблонов HTML.Проблема здесь связана с тем, что после того, как представление уже начало выполнять , страница пыталась установить фильтр ответа для манипулирования HTML-кодом, отправляемым клиенту.

Решение в этом случае - перенести установку фильтра ответа в более раннюю часть конвейера MVC.Например, используя фильтр настраиваемых действий, вы можете переопределить метод OnResultExecuting (), чтобы установить фильтр настраиваемых ответов.Это перемещает установку из представления и не нарушает принцип простых представлений только для HTML.

...