ASP.Net MVC2 (RTM) фильтрация ответа повреждений - “Фильтрация не позволяется”

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

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

С обновлением метод set для этого свойства бросает 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 использует a System.Web.Mvc.ViewPage.SwitchWriter как Выходное свойство HttpResponse, тогда как MVC 1 использовал простое HttpWriter. Это объясняет, почему исключение выдается.

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

Дальнейшие комментарии ценятся на этом.

6
задан womp 6 April 2010 в 19:44
поделиться

1 ответ

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

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

3
ответ дан 17 December 2019 в 18:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: