Ich versuche, meine API einzurichten, so wird es mit XML oder JSON abhängig von der Accept-Header antworten.ASPNetCore API Inhaltsverhandlung funktioniert nicht
ich nach dem Tutorial von Shawn W: https://wildermuth.com/2016/03/16/Content_Negotiation_in_ASP_NET_Core
Es sagt, ein Paket hinzuzufügen: "Microsoft.AspNet.Mvc.Formatters.Xml": "6.0.0-rc1-final"
Aber ich kann es nicht statt finden, so installiert: Microsoft.AspNetCore.Mvc.Formatters.Xml
Er sagt, dies dem Abschnitt "config services" im Startmenü hinzuzufügen:
Dann Der Browser ist automatisch für den Empfang von XML vorgesehen, da er standardmäßig Accept: text/xml header verwendet, XML nicht in meinem Browser oder mithilfe von postman. Ich bekomme Json, egal was ich Accept Header gesetzt habe.
Ich habe versucht, setzen [Produces("application/xml")]
auf meinem Controller und es gibt eine leere 200 OK-Seite.
Wie bekomme ich meine API, um JSON standardmäßig zurückzugeben, oder XML, wenn Accept vorhanden ist?
Edit 1:
Ich benutze dies als meine http-Code erhalten:
[HttpGet]
public IActionResult Get() {
var invoices = context.Invoices.ToList();
var mappedInvoices = mapper.Map<List<DomainModels.Invoice>, List<Invoice>>(invoices);
return Ok(mappedInvoices);
}
Und ich versuche, diese DTO zurückzukehren:
public class Invoice : TrackedObject {
public DateTime Date { get; set; }
public decimal Total { get; set; }
public string OrderNumber { get; set; }
public PaymentType? PaymentType { get; set; }
public ICollection<InvoiceItem> Items { get; set; }
}
public enum PaymentType {
Cheque,
Cash,
Card,
Account
}
bearbeiten 2:
Wenn ich dieses auslagern:
// Add framework services.
services
.AddMvc(options => {
options.RespectBrowserAcceptHeader = true;
options.InputFormatters.Add(new XmlSerializerInputFormatter());
options.OutputFormatters.Add(new XmlSerializerOutputFormatter());
}).AddJsonOptions(options => {
// Force Camel Case to JSON
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
});
und ersetzen mit der unten:
services.AddMvc().AddXmlSerializerFormatters();
Und dann [Produces("application/xml")]
Methode über meiner get setzen bekomme ich eine 406 Not Acceptable Antwort.
Sie sollten die XML-Serialisierer hinzufügen mit 'services.AddMvc(). AddXmlSerializerFormatters();', es ist ein bisschen einfacher. Ich hatte ein ähnliches Problem vorher, der Grund war dann das Objekt, das ich zurückgab. Können Sie zeigen, welche Art von Datenstruktur Sie zurückgeben? – juunas
@juunas Habe meine services.AddMvc komplett für dich ausgetauscht und es gibt immer noch JSON zurück! – Smithy