2017-12-23 14 views
2

基本的なASP.NET Core 2 APIプロジェクトとコンテンツのネゴシエーションとJSON以外のものを返すのは非常に混乱しています。ASP.NETコア2でXMLにシリアル化できません

私はこれまで1.1プロジェクトでは動作していましたが、2では動作しませんでした。基本的に、要求タイプに応じてJSONまたはXMLのいずれかを返すようにしたいと考えています。

public void ConfigureServices(IServiceCollection services) 
    { 
     services.AddMvc(options => 
     { 
      options.ReturnHttpNotAcceptable = true; 
      options.OutputFormatters.Add(new XmlSerializerOutputFormatter()); 
     }); 
    } 

IもAddXmlSerializerFormatters()同じ差を使用することができ(及び試み):

はその要件の一部として、私はそうのようなXMLフォーマッタを設定します。これは私が数え切れないほどの事例で見てきたやり方です。

私は基本的にのように見える、単一のコントローラおよび単一のアクションを持っています。今、私が実行したときに、私はポストマンにこのバックを得る

[Route("api/[controller]")] 
public class DefaultController : Controller 
{ 
    [HttpGet] 
    [Route("")] 
    public IActionResult Index() 
    { 
     return Ok(new 
     { 
      success = true 
     }); 
    } 
} 

{"success": true} 

だから、それが動作する(あるいは少なくとも、デフォルトで)をJSONに変換します。私が代わりに、ヘッダーAccept: application/xmlを使用して要求した場合

それから私は今、私はoptions.ReturnHttpNotAcceptable = true;を取る場合は、それは関係なく、JSONを返します406

のHTTPエラーが発生します。

私には何が欠けていますか?私はこの上に私の頭を掻いて座っている。私が知る限り、受け入れ可能なコンテンツフォーマッタを登録しました。

+0

あなたは 'options.OutputFormatters.Insert(0、新しいXmlSerializerOutputFormatter()'を代わりに使用した場合はどうなりますか? –

+0

同じ違い@CamiloTerevinto、私は実際にデバッグ>あまりにも。 – Lloyd

+0

あなたが出力に関連するすべての出力を取得しないことにしようとしたと思いますウィンドウ? –

答えて

3

匿名型をXMLにシリアル化できないため、フォーマッタが失敗し、JSONフォーマッタに戻ってしまうという問題があります。

解決方法:XMLを返す必要がある場合はクラスを使用してください。

関連する問題