2010-04-06 7 views
6

Ich habe gerade einen Testlauf von einem Upgrade auf ASP.Net MVC 2 (RTM) in Erwartung der vollständigen offiziellen .Net 4.0 durchgeführt Veröffentlichung kommt später in diesem Monat.ASP.Net MVC2 (RTM) bricht Antwort Filterung - "Filterung ist nicht erlaubt"

Unsere Anwendung verwendet einen Minimizer für unsere CSS und Javascript. Dazu verwendet es die Eigenschaft HttpResponse.Filter, um einen benutzerdefinierten Filter festzulegen.

Mit dem Upgrade wirft der Setter für diese Eigenschaft eine HttpException mit der Aussage "Filterung ist nicht erlaubt." Suchen Sie, dass die HttpResponse.Filter Eigenschaft in Reflektor dies zeigt:

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

...

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

klar, dass etwas in der Art und Weise verändert hat der Httpresponse in den Ausgabestream schreibt in MVC2. Weiß jemand, was die Änderung ist, oder zumindest ein Workaround dafür?

EDIT: Das scheint ziemlich radikal. Einige weitere Untersuchungen zeigen, dass ASP.Net MVC 2 RTM eine System.Web.Mvc.ViewPage.SwitchWriter als Ausgabeeigenschaft eines HttpResponse verwendet, während MVC 1 ein einfaches altes HttpWriter verwendet. Das erklärt, warum die Ausnahme ausgelöst wird.

Aber das erklärt nicht, warum sie entschieden haben, diese Funktionalität komplett zu brechen. This thread scheint zu zeigen, dass dies nur vorübergehend ist ... aber das macht mich ziemlich nervös ... das ist das RTM schließlich.

Weitere Kommentare zu diesem Thema.

+0

Für was es wert ist, MVC 2 RTM wurde bereits veröffentlicht: http://www.microsoft.com/downloads/details.aspx?FamilyID=c9ba1fe1-3ba8-439a-9e21-def90a8615a9&displaylang=en – Jaxidian

+0

Danke - das ist was Ich versuche auf zu aktualisieren. Ich sollte den Titel klarer machen. – womp

+0

Was Sie zu tun versuchen, wurde wahrscheinlich nie von Anfang an unterstützt. Wenn Sie im Wesentlichen versuchen, die Bereitstellung statischer Inhalte zu erreichen, sollten Sie die WebForms-Ansichts-Engine nicht verwenden, um dies zu erreichen. Was genau versuchen Sie zu tun? Warum brauchst du einen Filter, um das abzuziehen? – Levi

Antwort

3

Ansichten in MVC sollen im Gegensatz zu regulären ASPX-Seiten als HTML-Templating-Systeme behandelt werden. Das Problem hier rührt von der Tatsache her, dass die Seite nachdem die Ansicht bereits gestartet gestartet hatte, versuchte die Seite einen Antwortfilter zu installieren, um das HTML zu manipulieren, das an den Client gesendet wird.

Die Lösung in diesem Fall ist, die Antwortfilterinstallation in einen früheren Teil der MVC-Pipeline zu verschieben. Wenn Sie beispielsweise einen benutzerdefinierten Aktionsfilter verwenden, können Sie die OnResultExecuting() -Methode überschreiben, um Ihren benutzerdefinierten Antwortfilter zu installieren. Dies verschiebt die Installation aus der Sicht und verletzt nicht das Prinzip einfacher HTML-Only-Ansichten.