Return "application/xml" anstelle von "text/plain" ASP.NET Kern-Web-API
Ich habe einen string, der XML-und ich muss es zurückgeben wie ein XML-Dokument. Dies ist standardmäßig zurückgegeben, wobei der content-type der text/plain
. Der Inhalt gerendert wird, aber ich muss den content-type sein application/xml
. Ich habe die option aktiviert RespectBrowserAcceptHeader, die Serialisierung von Objekten in XML und die korrekte content-Typ, außer wenn das Objekt ein string ist.
[HttpGet]
public string Get()
{
return xmlString;
}
public static string xmlString = @"<?xml version=""1.0"" encoding=""UTF-8""?>
<sample>
Hello World.
</sample>";
- Welche version von ASP.NET Core benutzt du?
"sdk": { "version": "1.0.0-rc1-update2", "runtime": "coreclr", "architecture": "x64" }
ContentResult
wird für die Arbeit auch.- Ich habe gerade versucht es mit Ihrer Antwort, und Visual Studio nicht lassen mir tun
ContentType = "application/xml",
Definitiv die richtige Richtung, und die Kombination der Antworten, ich war in der Lage, es zu bekommen. - Seltsam. Objekt-Initialisierungen seit C# 3.0.
- Gut, es war nur ein problem mit dieser einen Zeile. VS sagt "cannot convert string to Microsoft.Net.Http.Header.MediaTypeHeaderValue". Ich vermute, es ist nur eine bestimmte version, was.
- Das ist ein gutes kleines Geheimnis :). Die Eigenschaft steht für einen string. Nicht zu sorgen..., das ist eine nette finden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie tun
return Content(xmlString, "application/xml")
aber das ist wahrscheinlich nicht der beste Weg, es zu tun, es sei denn, Sie in dieser Weise gespeichert werden, auf das Dateisystem oder der Datenbank.In der Regel würden Sie wollen, um stark typisierte Klassen, die Sie wieder aus Ihren Aktionen und haben Ihnen Serialisierung als xml.
Können Sie auch sagen, Ihre Aktionen zu return der Inhalt basiert auf den accept-header (d.h. entweder json oder xml), aber für xml benötigen Sie zum registrieren des xml-serialisierungsprogramme erste iirc.
und kommentieren Ihre Aktionen
Wenn der client sendet
Accept: application/xml
dann wird es die xml zurückgeben und wenn der client sendetAccept: application/json
gibt es json.Produces
annotation?Kurze Antwort
Wenn Sie eine Zeichenkette, die XML-und die Notwendigkeit, zu ihm zurückzukehren, wie ein XML-Dokument, dann wieder ein ContentResult.
Vollständiges Beispiel
Controller
Start
Projekt.json
Antwort
Hier ist es auf GitHub für eine gute Maßnahme. 🙂
[HttpGet, Produces("application/xml")] public ContentResult Get() { return Content(xmlString, "application/xml"); }
(sorry für die schreckliche Formatierung)