Upgrade auf MVC4 RC: Es ist kein MediaTypeFormatter verfügbar, um ein Objekt vom Typ 'TestRequestModel' aus dem Inhalt mit dem Medientyp '' undefined '' zu lesen.

8

Ich habe die MVC4-Betaversion verwendet und arbeite derzeit an einem Upgrade auf die kürzlich veröffentlichte RC-Version.

Es hat den Anschein, dass sich Modellanbindung komplexer Anfragetypen geändert hat , aber ich kann nicht herausfinden, wie / was ich falsch mache.

Beispiel: Ich habe den folgenden API-Controller:

%Vor%

Dies ergibt das erwartete Ergebnis:

%Vor%

Sagen Sie jetzt, ich ändere einfach die Signatur und nehme einen Anfragetyp an, wie folgt:

%Vor%

Ich bekomme jetzt den folgenden Fehler:

%Vor%

Ich habe mir den Quellcode angesehen, wo diese Ausnahme in HttpContentExtensions geworfen wird, aber es sieht so aus, als ob nach Inhaltsheadern gesucht wird (was ich haben sollte), und wenn es nicht versucht, versucht es Erhalte einen Formatierer aus der MediaTypeFormatter -Kollektion, die er für den spezifischen Typ hat (was nicht möglich ist) und wirft dann.

Hat das noch jemand erlebt? Einige globale Registrierung fehlt mir?

    
Brandon Linton 07.06.2012, 14:41
quelle

2 Antworten

13

Ich sehe, dass Ihre ursprüngliche Frage beantwortet wurde, aber um die andere zu beantworten, hat sich die Modellbindung in der RC etwas geändert.

Ссылка

Dieser Link enthält einige Details dazu. Aber um die Änderung zusammenzufassen, die Sie zu beeinflussen scheint, zieht die Model-Bindung ihre Werte entweder aus dem Body oder der URL der Anfrage. Dies gilt auch für frühere Releases, aber mit dem Veröffentlichungskandidaten wird MVC4 standardmäßig den Text für komplexe Typen und das URI für Werttypen suchen.

Wenn Sie also einen Body mit Ihrer Anfrage senden, der den Schlüssel "SomeParameter" enthält, sollten Sie die Bindung sehen. Oder Sie könnten mit der URL binden, wenn Sie die Deklaration in:

ändern %Vor%

Glücklicherweise hat das Team die möglichen Probleme damit vorausgesehen und uns mit Attributen versehen, die wir verwenden könnten, um dieses Verhalten zu überschreiben.

%Vor%

Der Schlüssel hier ist [FromUri] , der dem Modellbinder sagt, dass er in der uri nach den Werten suchen soll. Es gibt auch [FromBody] , wenn Sie einen Werttyp in den Hauptteil einer Anfrage einfügen möchten.

    
parKing 08.06.2012, 12:16
quelle
2

Wir haben das Gleiche gesehen. In unserem Fall war das Problem, dass ein komplexes Objekt in eine get-Methode übergeben wurde. Wir mussten ein [FromUri] -Attribut in dem Parameter zu dieser Methode hinzufügen.

Geoffrey Hudik 07.06.2012 20:18

quelle