1

を働いていません。 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受け入れられない応答を取得します。

+1

XMLシリアライザに 'services.AddMvc()。AddXmlSerializerFormatters();'を追加すると、少し楽です。私は前に同様の問題があった、理由は私が戻っていたオブジェクトだった。どのような種類のデータ構造を返すのかを示すことができますか? – juunas

+0

@ juunas私のservices.AddMvcを完全にあなたのために交換し、それはまだJSONを返す! – Smithy

答えて

4

私は最終的に正しいセットアップを受け入れるヘッダを経由してJSONやXMLを返すことがわかりました。

は、あなたがこのように見えるためにあなたのサービスの設定を必要とするあなたのウェブAPIコントローラは(デフォルトでJSON)JSONまたはXMLを返すために取得するには:

// Add framework services. 
services 
    .AddMvc(options => { 
     options.RespectBrowserAcceptHeader = true; 
    }) 
    //support application/xml 
    .AddXmlDataContractSerializerFormatters() 
    //support application/json 
    .AddJsonOptions(options => { 
     // Force Camel Case to JSON 
     options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 
    }); 

非常にシンプルあなたはどのように知っています!分かりづらいドキュメントがたくさんあります。

関連する問題