2010-04-06 13 views
6

Acabo de realizar una prueba de actualización de un proyecto a ASP.Net MVC 2 (RTM) en previsión del .Net 4.0 oficial completo lanzamiento a finales de este mes.ASP.Net MVC2 (RTM) rompe el filtro de respuesta - "No se permite el filtrado"

Nuestra aplicación está utilizando un minimizador para nuestro CSS y javascript. Para hacerlo, está haciendo uso de la propiedad HttpResponse.Filter para establecer un filtro personalizado.

Con la actualización, el colocador de esta propiedad está arrojando un HttpException que dice "No se permite el filtrado". Buscando que la propiedad HttpResponse.Filter en el reflector muestra esto:

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

...

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

Es evidente que algo ha cambiado en la forma en que el HttpResponse está escribiendo en el flujo de salida en MVC2. ¿Alguien sabe cuál es el cambio, o al menos una solución para esto?

EDITAR: Esto parece bastante radical. Algunas investigaciones adicionales muestran que ASP.Net MVC 2 RTM está utilizando un System.Web.Mvc.ViewPage.SwitchWriter como la propiedad de salida de HttpResponse, mientras que MVC 1 estaba usando un simple viejo HttpWriter. Eso explica por qué se está lanzando la excepción.

Pero eso no explica por qué han elegido romper por completo esta funcionalidad. This thread parece indicar que esto es solo temporal ... pero esto me pone bastante nervioso ... este es el RTM después de todo.

Cualquier otro comentario apreciado en esto.

+0

Por lo que vale, MVC 2 RTM ya ha sido lanzado: http://www.microsoft.com/downloads/details.aspx?FamilyID=c9ba1fe1-3ba8-439a-9e21-def90a8615a9&displaylang=en – Jaxidian

+0

Gracias - eso es lo que Estoy tratando de actualizar a. Debería aclarar el título. – womp

+0

Lo que estás tratando de hacer probablemente nunca fue compatible en primer lugar. Si esencialmente intenta conectar cómo se sirve el contenido estático, no vaya a través del motor de visualización de WebForms para llevarlo a cabo. ¿Qué estás tratando de hacer exactamente? ¿Por qué necesitas un filtro para llevarlo a cabo? – Levi

Respuesta

3

Las vistas en MVC, a diferencia de las páginas regulares .aspx, están destinadas a ser tratadas como sistemas de plantillas HTML. El problema aquí proviene del hecho de que después de que la vista ya había comenzado a ejecutar, la página intentó instalar un filtro de respuesta para manipular el HTML que se enviaba al cliente.

La solución en este caso es mover la instalación del filtro de respuesta a una parte anterior de la tubería MVC. Por ejemplo, al usar un filtro de acción personalizado, puede anular el método OnResultExecuting() para instalar su filtro de respuesta personalizado. Esto mueve la instalación fuera de la vista y no viola el principio de simples vistas HTML.

Cuestiones relacionadas