&引用;响应筛选器的使用无效“;重写ASP.NET输出时

&引用;响应筛选器的使用无效“;重写ASP.NET输出时,asp.net,filter,asp.net-mvc-4,httpexception,Asp.net,Filter,Asp.net Mvc 4,Httpexception,我有一个非常基本的ASP.NET响应过滤器,可以“很好”地工作。我使用它来替换静态资源的域 我在控制器中的代码如下所示: protected override void OnActionExecuted(ActionExecutedContext filterContext) { _cdnRewriter.Stream = filterContext.RequestContext.HttpContext.Response.Filter;

我有一个非常基本的ASP.NET响应过滤器,可以“很好”地工作。我使用它来替换静态资源的域

我在控制器中的代码如下所示:

    protected override void OnActionExecuted(ActionExecutedContext filterContext)
    {
            _cdnRewriter.Stream = filterContext.RequestContext.HttpContext.Response.Filter;
            filterContext.RequestContext.HttpContext.Response.Filter = _cdnRewriter;
    }
以及重写过滤器本身:

    public override void Write(byte[] buffer, int offset, int count)
    {
        var html = Encoding.Default.GetString(buffer, offset, count);

        //manipulate html

        byte[] outData = Encoding.Default.GetBytes(html);
        Stream.Write(outData, 0, outData.GetLength(0));
    }
对于我网站上的某些页面(我还找不到押韵或原因),我可能90%的时间会收到“HTTP Web异常:响应过滤器的无效使用”。简单地刷新十几次将获得正确的输出,但再次刷新将显示异常:

[HttpException (0x80004005): Invalid use of response filter]
   System.Web.HttpResponseStreamFilterSink.VerifyState() +4097234
   System.Web.HttpResponseStreamFilterSink.Write(Byte[] buffer, Int32 offset, Int32 count) +28
   NeoSmart.Web.CdnRewriteFilter.Write(Byte[] buffer, Int32 offset, Int32 count) +452
   System.Web.HttpWriter.FilterIntegrated(Boolean finalFiltering, IIS7WorkerRequest wr) +359
   System.Web.HttpResponse.FilterOutput() +121
   System.Web.CallFilterExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +119
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +165

我的响应筛选器是否有问题?

我可能应该更清楚:响应筛选器不应该共享。我在每个类中使用一个对象,每次调用
OnActionExecuted
函数时都创建一个新的响应过滤器来解决问题