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

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

Es scheint, dass sich die Typen komplexer Anfragen für die Modellbindung geändert haben, aber ich kann nicht herausfinden, wie / was ich falsch mache.

Angenommen, ich habe den folgenden API-Controller:

public class HomeApiController : ApiController
{
    public TestModel Get()
    {
        return new TestModel
        {
            Id = int.MaxValue,
            Description = "TestDescription",
            Time = DateTime.Now
        };
    }
}

Dies ergibt das erwartete Ergebnis:

<TestModel xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/xxxx">
    <Description>TestDescription</Description>
    <Id>2147483647</Id>
    <Time>2012-06-07T10:30:01.459147-04:00</Time>
</TestModel>

Nehmen wir nun an, ich ändere einfach die Signatur, indem ich einen Anfragetyp wie folgt aufnehme:

public TestModel Get(TestRequestModel request)
{
    ...

public class TestRequestModel
{
    public int? SomeParameter { get; set; }
}

Ich erhalte jetzt den folgenden Fehler:

<Exception xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/System.Web.Http.Dispatcher">
    <ExceptionType>System.InvalidOperationException</ExceptionType>
    <Message>
        No MediaTypeFormatter is available to read an object of type 'TestRequestModel' from content with media type ''undefined''.
    </Message>
    <StackTrace>
    at System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger) at System.Net.Http.HttpContentExtensions.ReadAsAsync(HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger) at System.Web.Http.ModelBinding.FormatterParameterBinding.ExecuteBindingAsync(ModelMetadataProvider metadataProvider, HttpActionContext actionContext, CancellationToken cancellationToken) at System.Web.Http.Controllers.HttpActionBinding.<>c__DisplayClass1.<ExecuteBindingAsync>b__0(HttpParameterBinding parameterBinder) at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext() at System.Threading.Tasks.TaskHelpers.IterateImpl(IEnumerator`1 enumerator, CancellationToken cancellationToken)
    </StackTrace>
</Exception>

Ich habe mir den Quellcode angeschaut, in dem diese Ausnahme in der geworfen wirdHttpContentExtensions, aber es sieht so aus, als würde es nach Inhaltsköpfen suchen (die ich haben sollte), und wenn es keine hat, versucht es, einen Formatierer von der zu bekommenMediaTypeFormatter Sammlung hat es für den bestimmten Typ (was es nicht kann) und wirft dann.

Hat das noch jemand erlebt? Eine weltweite Registrierung fehlt mir?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage