2017-06-05 19 views
1

XMLまたはJSONの形式でデータを返すWebアプリケーションを作成したいのですが、どうすればよいですか?ベストプラクティスの私が使用する必要がありますされている何MVC .NET Core Web API XMLまたはJSON

namespace ReturningJSONandXML.Controllers 
{ 
    public class GetInfoController : Controller 
    { 
     // GET: /<controller>/ 
     public List<SomeImportantInformation> Get() 
     { 
      List<SomeImportantInformation> ImportantInfo = new List<SomeImportantInformation>(); 
      ImportantInfo.Add(new SomeImportantInformation { ID = 0, Information = "Awesome info" }); 
      ImportantInfo.Add(new SomeImportantInformation { ID = 1, Information = "Some other interesting info" }); 
      return ImportantInfo; 
     } 
    } 
} 

私はXMLとJSONファイルを返したいと思います...

モデル:

namespace ReturningJSONandXML.Models 
{ 
    public class SomeImportantInformation 
    { 
     public int ID { get; set; } 
     public string Information { get; set; } 
    } 
} 

コントローラここに?

+4

t彼はあなたのリクエストヘッダーに置いたものに応答を変換します... application/jsonまたはapplication/xml – NicoRiff

+3

MVC 6(ASP.NET Core)を使用している場合、フレームワークは自動的にコンテンツをネゴシエートします(適切なcontent- @NicoRiffはこう言った)。詳細は[ドキュメントの中の](https://docs.microsoft.com/en-us/aspnet/core/mvc/models/formatting#content-negotiation)を参照してください。 –

答えて

4

フレームワークは自動的にあなたの世話をしますので、ホイールを再開発する必要はありません。答えは以下のとおりです。ただし、Acceptヘッダーを指定しない限り、APIは応答をJSONとしてシリアル化します。たとえば 'application/xml'と指定すると、XMLが返されます。 MSDNが言うとおり:

コンテンツネゴシエーション(略してconneg)は、クライアント がAcceptヘッダーを指定した場合に発生します。 ASP.NET Core MVCで使用されるデフォルトの形式はJSONです。コンテンツネゴシエーションはObjectResultによって実装されます。 ヘルパーメソッド(すべてObjectResultに基づいています)から返されたステータスコード固有のアクション結果にも組み込まれています。 モデルタイプ(データ転送 タイプとして定義したクラス)を返すこともできます。フレームワークは自動的にObjectResult にラップします。 コンテンツのネゴシエーションは、Acceptヘッダーが要求の に表示された場合にのみ発生します。要求に受け入れヘッダーが含まれている場合、フレームワーク は受諾ヘッダーのメディアタイプを優先度 の順番で列挙し、受諾ヘッダーで指定されたフォーマットの1つである で応答を生成できるフォーマッターを見つけようとします。クライアントの要求を満たすことができる フォーマッタが見つからない場合、 フレームワークは 応答を生成できる最初のフォーマッタを見つけようとします(ただし、開発者がMvcOptions のオプションを406 Not Acceptableに戻すように設定している場合を除く)。リクエストでXMLが指定されている場合は、 がXMLフォーマッタに設定されていない場合は、JSONフォーマッタ が使用されます。より一般的には、 が要求されたフォーマットを提供できるフォーマッタが構成されていない場合、オブジェクトをフォーマットするよりも最初のフォーマッタが使用されます。ヘッダーが指定されていない場合、返されるオブジェクトを が処理できる最初のフォーマッターを使用して 応答をシリアル化します。この場合、交渉は行われません。 サーバーは、使用する形式を決定しています。コア2と

https://docs.microsoft.com/en-us/aspnet/core/mvc/models/formatting

1

、あなたは、特にXML入力/出力を可能にするために、MVC servericeにオプションを追加する必要があります。

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

、その後にAcceptヘッダーを変更します。

application/xml または application/json

関連する問題