を働いていません。 https://wildermuth.com/2016/03/16/Content_Negotiation_in_ASP_NET_CoreASPNetCore APIコンテンツネゴシエーションは、それがXMLやJSONがAcceptヘッダーに依存するとして対応させていただきますので、私は私のAPIが設定取得しようとしている
それはにパッケージを追加すると言う:"Microsoft.AspNet.Mvc.Formatters.Xml": "6.0.0-rc1-final"
は
しかし、私はそれを見つけることができなかったので、代わりにインストール: Microsoft.AspNetCore.Mvc.Formatters.Xml
彼
私はショーンWによってチュートリアル、次のよスタートアップの設定サービスセクションにこれを追加するように言います:
デフォルトではAccept:text/xmlヘッダーが使用されているため、ブラウザーにXMLが表示されないか、または郵便番号を使用するため、ブラウザーは自動的にXMLを受け取るようになります。私はAcceptヘッダーに何を設定してもJsonを取得します。
私はコントローラに[Produces("application/xml")]
を置こうとしましたが、空の200 OKページを返します。
デフォルトでJsonを返すようにするにはどうすればよいですか、またはAcceptがある場合はXMLを返すようにするにはどうすればよいですか?
編集1:
[HttpGet]
public IActionResult Get() {
var invoices = context.Invoices.ToList();
var mappedInvoices = mapper.Map<List<DomainModels.Invoice>, List<Invoice>>(invoices);
return Ok(mappedInvoices);
}
そして、私はこのDTOを返すようにしようとしている:
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
}
編集
私は私のHTTP GETのコードとしてこれを使用しています2:
// 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();
});
以下で置き換えます:私はこのスワップアウトした場合
services.AddMvc().AddXmlSerializerFormatters();
をそして、私のgetメソッドの上[Produces("application/xml")]
を入れて、私は406受け入れられない応答を取得します。
XMLシリアライザに 'services.AddMvc()。AddXmlSerializerFormatters();'を追加すると、少し楽です。私は前に同様の問題があった、理由は私が戻っていたオブジェクトだった。どのような種類のデータ構造を返すのかを示すことができますか? – juunas
@ juunas私のservices.AddMvcを完全にあなたのために交換し、それはまだJSONを返す! – Smithy