Aktualizacja do MVC4 RC: Brak MediaTypeFormatter do odczytu obiektu typu „TestRequestModel” z treści typu nośnika „undefined”

Korzystam z wersji beta MVC4 i obecnie pracuję nad uaktualnieniem do niedawno wydanej wersji RC.

Wygląda na to, że zmieniono typy złożonych żądań wiążących model, ale nie mogę zrozumieć, co robię źle.

Na przykład powiedzmy, że mam następujący kontroler API:

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

Daje to oczekiwany wynik:

<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>

Teraz mówię, że po prostu zmieniam podpis, przyjmując typ żądania, taki jak ten:

public TestModel Get(TestRequestModel request)
{
    ...

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

Otrzymuję teraz następujący błąd:

<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>

Sprawdziłem kod źródłowy, w którym ten wyjątek jest generowany wHttpContentExtensions, ale wygląda na to, że sprawdza nagłówki treści (które powinienem mieć), a jeśli nie ma, próbuje pobrać formatera zMediaTypeFormatter kolekcja ma dla określonego typu (którego nie może), a następnie rzuca.

Czy ktoś inny doświadczył tego? Brakuje jakiejś globalnej rejestracji?

questionAnswers(2)

yourAnswerToTheQuestion