MVC 4 - Web API und JSON?

8

Ich arbeite an der MVC 4-Web-API und bin etwas verwirrt über die Standardformatierung. Ich möchte, dass die API-Daten in JSON sind. Es gibt es jedoch in XML zurück. Laut der MVC 4 Start-Video bei Ссылка , es sollte standardmäßig JSON sein. Aber wenn ich ein neues Web-API-Projekt erstellen und das Beispiel ausführen, bekomme ich Folgendes:

%Vor%

Ich bin im Kreis herumgelaufen und habe versucht, das in JSON zu bekommen, aber anscheinend gibt es viele Fehlinformationen darüber. Wie:

  1. Wenn ich dem Header des Inhaltstyps "application / json" hinzufüge, sollte JSON zurückgegeben werden. Das funktioniert nicht, aber ich vermute, dass ich den Namen der Kopfzeilenvariablen nicht richtig habe, da ich nicht den genauen Namen finde, den ich verwenden kann. Ich habe versucht, "Content-Type" und "ContentType" in den Anfrage-Header ohne Glück. Außerdem möchte ich JSON standardmäßig, nicht nach Header-Informationen.
  2. Wenn ich einen JsonFormatter erstelle und ihn in Application_Start GlobalConfiguration.Configuration.Formatters.Insert(0, new JsonNetFormatter(serializerSettings)); hinzufüge, sollte es den Trick machen. Aber ich habe das abgeschrieben, weil keines der Beispiele funktioniert.

Was könnte ich tun, etwas Einfaches, um Daten standardmäßig im JSON-Format auszugeben?

    
Levitikon 15.10.2012, 22:33
quelle

6 Antworten

20

Fügen Sie dies GLOBAL.ASAX hinzu, um die Antwort application / json

zu erhalten %Vor%

So sollte es im Zusammenhang aussehen:

%Vor%

ODER Wenn Sie XML als Medientyp beibehalten möchten, können Sie stattdessen App_Start / WebApiConfig.cs :

bearbeiten %Vor%

Dies macht JSON zur Standardantwort für einen Webbrowser, gibt aber text / html zurück.

Quelle

    
Justin 15.10.2012, 22:46
quelle
4
  

Ich möchte, dass die API-Daten in JSON sind. Es gibt es jedoch in XML

zurück

Wie greifen Sie auf Ihr Webapi zu? Verwenden Sie Chrome, um auf Ihren Webapi-Service zuzugreifen (wie Nick im Kommentar erwähnt hat)? Chrome fügt der Anforderung die Accept-Headeranwendung / xml hinzu ...

  

Wenn ich dem Header des Inhaltstyps "application / json" hinzufüge, sollte JSON

zurückgegeben werden

Versuchen Sie stattdessen, die Kopfzeile 'Accept' zu übernehmen.

  

Wenn ich einen JsonFormatter erstelle und ihn in Application_Start GlobalConfiguration.Configuration.Formatters.Insert (0, neuer JsonNetFormatter (serializerSettings)); Es sollte den Trick machen. Aber ich habe das abgeschrieben, weil keines der Beispiele funktioniert.

Wenn der Accept-Header der Anfrage "application / xml" lautet, wird bei der Inhaltsverhandlung weiterhin der XmlMediaTypeFormatter ausgewählt und die Anwendung / xml zurückgegeben. Eine weitere Sache ist, dass der Formatierer für JSON JsonMediaTypeFormatter genannt wird und sich bereits in Position 0 der Formatzersammlung befindet.

    
Maggie Ying 15.10.2012 23:23
quelle
0

Wenn Sie nur JSON möchten, dann löschen Sie die Formatierersammlung aller Standardwerte und fügen Sie dann nur noch den JSON-Eintrag hinzu.

    
Darrel Miller 16.10.2012 11:28
quelle
0

Sie müssen die xml-Unterstützung nicht entfernen, um eine JSON-Antwort zu erhalten. Bei GET-Anfragen sollten Sie den Accept-Header und nicht den Content-Type-Header setzen. Für andere HTTP-Verben kommt es darauf an. Vollständig erklärt hier.

Ссылка

Bonus: Verwenden Sie das Postman-Plugin von Google Chrome, um REST-APIs zu testen. Sehr zu empfehlen:)

Ссылка

    
John Korsnes 25.01.2013 12:00
quelle
0

Sie können auch unten in GLOBAL.ASAX

schreiben %Vor%

das funktioniert auch für mich.

    
KomalJariwala 19.11.2013 12:09
quelle
0

Zitat von Felipe Leusin ( Wie bekomme ich die ASP.NET-Web-API, um JSON anstelle von XML mithilfe von Chrome zurückzugeben? )

Ich füge einfach Folgendes in die Klasse App_Start / WebApiConfig.cs in meinem MVC-Web-API-Projekt ein.

%Vor%

Das stellt sicher, dass Sie bei den meisten Abfragen json erhalten, aber Sie können xml erhalten, wenn Sie text / xml senden.

Wenn Sie die Antwort "Content-Type" als "application / json" benötigen, überprüfen Sie bitte die folgende Antwort von Todd: Ссылка

    
Raphael Costa 17.02.2015 22:39
quelle