2 Stimmen

Unterschiede in der Inhaltsaushandlung zwischen Sammlungen und Einzelwerten in MVC 4?

Ich nutze den neuen MVC4 ApiController, um eine Suchschnittstelle zu erstellen; etwa so:

public IEnumerable<RecordSummaryType> Get( ... )
{
    var list = MyService.GiveMeTheList( ... );
    return list;
}

public SingleRecordDetailType Get(long id)
{
    var result = MyService.GiveMeASingleValue(id);
    return result;
}

Aus irgendeinem Grund, in diesem Fall der IEnumerable-Aufruf ehrt Content Negotiation - d.h., wenn ich Anwendung/xml in der Anforderung akzeptieren Header übergeben es gibt XML zurück, und wenn ich Anwendung/json übergeben es gibt JSON -. aber der SingleRecordType-Aufruf gibt nur JSON zurück, auch wenn Sie nach XML fragen.

Meine Frage ist also. Gibt es Unterschiede in der Art und Weise, wie MVC 4 Sammlungen gegenüber Einzelwerttypen behandelt? Oder, was wahrscheinlicher ist, gibt es Hooks in MVC, wo man versehentlich deaktivieren Content Negotiation für bestimmte Anrufe?

3voto

tpeczek Punkte 23457

Es hängt davon ab, ob der SingleRecordDetailType durch den XmlSerializer serialisiert werden kann. Der XmlSerializer ist der Standard-XML-Formatierer in ASP.NET Web API, lesen Sie aquí um mehr über seine Grenzen zu erfahren.

Wenn die Web-API die Antwort nicht mit dem angeforderten Formatierer serialisieren kann, wird der erste Formatierer in der Liste verwendet, der in der Lage ist, die Antwort zu serialisieren (in den meisten Fällen ist dies der JSON-Formatierer).

Als Lösung können Sie Ihre Klasse so ändern, dass sie von XmlSerializer serialisierbar ist, oder den XML-Formatierer so umkonfigurieren, dass er den Datenvertragsserialisierer verwendet, indem Sie die Eigenschaft UseDataContractSerialzier auf true setzen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X