2017-06-05 5 views
1

Ich möchte eine Webanwendung erstellen, die Daten in Form von XML oder JSON zurückgibt, wie gehe ich dabei vor?MVC .NET Core Web API XML oder JSON

Das Modell:

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

Der Controller:

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; 
     } 
    } 
} 

Ich möchte eine XML und JSON-Datei zurückzukehren ...

Was ist die beste Praxis der I verwendet werden sollte, Hier?

+4

t er api wird die Antwort auf das konvertieren, was auch immer Sie auf Ihre Anfrage header ... application/json oder application/xml setzen – NicoRiff

+3

Wenn Sie MVC 6 (ASP.NET Core) verwenden, wird das Framework automatisch den Inhalt aushandeln (den entsprechenden Inhalt zurücksenden). Typ wie @NicoRiff sagte). Weitere Informationen [in der Dokumentation] (https://docs.microsoft.com/en-us/aspnet/core/mvc/models/formatting#content-newtiation). –

Antwort

4

Das Framework kümmert sich automatisch um Sie, damit Sie das Rad nicht neu erfinden müssen. Die Antwort wird unten zitiert. Aber um es einfacher zu machen: Wenn Sie keinen Accept-Header angeben, serialisiert die API die Antwort als JSON. Wenn Sie beispielsweise 'application/xml' angeben, wird XML zurückgegeben. Wie MSDN sagt:

Content-Negotiation (Conneg kurz) tritt auf, wenn der Client einen Accept-Header angibt. Das von ASP.NET Core MVC verwendete Standardformat ist JSON. Die Inhaltsverhandlung wird von ObjectResult implementiert. Es ist auch in den Statuscode spezifische Aktion Ergebnisse von die Hilfsmethoden (die alle auf ObjectResult basieren) zurückgegeben. Sie können auch einen Modelltyp zurückgeben (eine Klasse, die Sie als Ihre Datenübertragung definiert haben Typ) und das Framework wird es automatisch in ein ObjectResult für Sie wickeln. Die Inhaltsverhandlung findet nur statt, wenn ein Accept-Header in der Anforderung angezeigt wird. Wenn eine Anfrage einen Accept-Header enthält, nummeriert das Framework die Medientypen im Accept-Header in der Präferenz und versucht, einen Formatierer zu finden, der eine Antwort in eines der vom accept-Header angegebenen Formate erzeugen kann. Wenn kein Formatierer gefunden wird, der die Anfrage des Clients erfüllen kann, versucht das Framework den ersten Formatierer zu finden, der eine Antwort erzeugen kann (außer der Entwickler hat die Option auf MvcOptions so konfiguriert, dass 406 Not Acceptable zurückgegeben wird). Wenn die Anforderung XML, , angibt, der XML-Formatierer jedoch nicht konfiguriert wurde, wird der JSON-Formatierer verwendet. Wenn kein Formatierer konfiguriert ist, der das angeforderte Format bereitstellen kann, dann wird der erste Formatierer als das Format des Objekts verwendet. Wenn kein Header angegeben ist, wird der erste Formatierer , der das zurückzuliefernde Objekt verarbeiten kann, zur Serialisierung der Antwort verwendet. In diesem Fall findet keine Verhandlung statt - der Server bestimmt, welches Format er verwenden wird.

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

1

mit dem Kern 2, müssen Sie speziell die Optionen des mvc serve in den XML-Eingabe/Ausgabe-Freigabe:

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

und dann wird der Accept-Header ändern:

anwendung/xml oder anwendung/json