Ich habe ein XDocument in einem Controller, den ich als xml und json Server (abhängig von der Accept-Header der Anfrage) Server möchten.Rückgabe von XDocument von Controller (dotnet corclr)
Ich bin mit Dotnet Kern:
In meinem startup.cs/ConfigureServices Ich habe dies:
services.AddMvc().AddXmlDataContractSerializerFormatters();
Mein Controller im Wesentlichen ist dies:
public async Task<IActionResult> getData(int id)
{
XDocument xmlDoc = db.getData(id);
return Ok(xmlDoc);
}
Wenn eine Anfrage machen mit Accept: application/json
, ich bekomme meine Daten richtig als JSON formatiert. Wenn ich eine Anfrage mit Accept: application/xml
mache, bekomme ich immer noch eine JSON-Antwort (wie bei application/json
).
Ich habe auch versucht, mit:
services.AddMvc().AddXmlSerializerFormatters();
aber das war noch schlimmer als auch normale Objekte als JSON bedient wurden (XmlDataContractSerializer normale Objekte umgehen kann, aber nicht XDocument).
Wenn ich den Controller [Produces("application/xml")]
hinzufügen (AddXmlSerializerFormatters
), bekomme ich einen Http 406 Fehler beim Serving XDocument, aber ich bekomme eine XML-Ausgabe bei der Rückgabe von normalen Objekten.
Muss ich das XDocument in Objekte konvertieren, um XML von einem Controller auszugeben? Gibt es eine einfache Möglichkeit, XDocuments in Objekte zu konvertieren?
Der Antrag wahrscheinlich hier eingereicht werden stattdessen sollte: https://github.com/dotnet/corefx als MVC verwendet nur die Serializer im Backend und hängt davon ab, ob sie einen Typ schreiben können oder nicht. Recht? –
Ihre Lösung scheint zu funktionieren, danke, aber ich hatte gehofft, sowohl json als auch xml Ergebnis anbieten zu können. Ich habe zahlreiche Controller und zahlreiche Endpunkte in jedem Controller, der xml/json basierend auf XDocument anbieten muss. Manuelles Überprüfen der Accept-Header in jedem Controller/Endpunkt ist ein bisschen viel. Ich werde mir den Xml-Ausgabeformatierer ansehen – galmok