Fehlermeldung "Filtern nicht zugelassen" in ASP.NET MVC

mvc
asp.net
net
csharp
Tags: #<Tag:0x00007f9adf9d0270> #<Tag:0x00007f9adf9d0040> #<Tag:0x00007f9adf9dbdf0> #<Tag:0x00007f9adf9dbbe8>

#1

Ich wollte einen Response-Filter schreiben, um Text im Ausgabe-HTML-Strom zu ersetzen und erhalte zur Laufzeit die Fehlermeldung:

System.Web.HttpException: Filtern nicht zugelassen.

Die relevanten Quelltextzeilen sehen so aus:

var response = filterContext.RequestContext.HttpContext.Response;
response.Filter = new PlaceholderReplaceFilter(response.Filter);

Nach einiger Recherche habe ich in einem Microsoft-Forums-Posting den Satz gefunden:

Response filters are not supported with Razor because of the way Razor buffers output.

Es liegt also daran, dass ich im Response den Filter ändern will.


#2

In meinem konkreten Fall (Text im Ausgabe-HTML-Strom ersetzen) habe ich das Konzept des Filters jetzt verworfen.

Stattdessen leite ich meine Views von einer Basis-Klasse ab und mache dort die Textersetzung:

public abstract class ZulWebMainViewBase : WebViewPage
{
    public override void WriteLiteral(object value)
    {
        value = AppResInformation.ReplacePlaceholders(value);
        base.WriteLiteral(value);
    }

    public override void Write(object value)
    {
        value = AppResInformation.ReplacePlaceholders(value);
        base.Write(value);
    }
}

sowie:

public abstract class ZulWebMainViewBase<TModel> : WebViewPage<TModel>
{
    public override void WriteLiteral(object value)
    {
        value = AppResInformation.ReplacePlaceholders(value);
        base.WriteLiteral(value);
    }

    public override void Write(object value)
    {
        value = AppResInformation.ReplacePlaceholders(value);
        base.Write(value);
    }
}

Die Textersetzungen finden in der Funktion AppResInformation.ReplacePlaceholders statt.