Fehler beim Veröffentlichen von JSON in Web API 2: Der Medientyp der Anforderungsentität 'text / plain' wird für diese Ressource nicht unterstützt

8

Ich habe diese Klasse:

%Vor%

Und diese WEB-API-Methode:

%Vor%

Ich habe die Web-API so eingestellt, dass sie JSON anstelle von XML zurückgibt, und ich habe keine weiteren Änderungen an der Standardkonfiguration vorgenommen. Ich versuche diese Methode mit der RESTClient-Erweiterung von Firefox zu testen. Hier ist meine Anfrage:

%Vor%

Allerdings bekomme ich diesen Fehler:

  

{"Message": "Der Medientyp der Anfrageentität 'text / plain' wird für diese Ressource nicht unterstützt.", "ExceptionMessage": "Es ist kein MediaTypeFormatter verfügbar, um ein Objekt vom Typ 'MyClass' aus Inhalten mit Medien zu lesen Geben Sie 'text / plain' ein. "," ExceptionType ":" System.Net.Http.UnsupportedMediaTypeException "," StackTrace ":" bei System.Net.Http.HttpContentExtensions.ReadAsAsync [T] (HttpContent-Inhalt, Typtyp, IEnumerable 1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n at System.Net.Http.HttpContentExtensions.ReadAsAsync(HttpContent content, Type type, IEnumerable 1 Formatierer, IFormatterLogger formatterLogger, CancellationToken cancellationToken) \ r \ n bei System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync (HttpRequestMessage-Anforderung, Typtyp, IEnumerable'1 Formatierer, IFormatterLogger FormatiererLogger, CancellationToken cancellationToken) "}

Bearbeiten:

Ich verstehe das nicht, weil es scheint, dass die Methode nicht einmal aufgerufen wird. Wenn ich debugge, sehe ich, dass der Konstruktor aufgerufen wird und dann keine andere Methode aufgerufen wird. Es wird keine Ausnahme ausgelöst.

Ich bin jetzt schon eine ganze Weile bei diesem Thema. Ich habe festgestellt, dass dieses Problem normalerweise auftritt, wenn Content-Type nicht richtig eingestellt ist, aber es scheint nicht mein Fall zu sein, da die Anfrage nicht einmal bearbeitet wird.

Irgendeine Idee?

Danke

    
reddy 19.09.2014, 13:54
quelle

5 Antworten

9

Sie haben den Content-Type von application/json im Body gesendet, anstatt als Header. So war Ihre POST-Anfrage standardmäßig auf text / plain. Die RestClient-Erweiterung hat eine separate Stelle, um den Header einzugeben.

Wenn Sie jemals eine Frage zu dem haben, was über die Leitung gesendet wird, überprüfen Sie die Registerkarte Netzwerk in den Entwicklertools Ihres Browsers oder verwenden Sie ein Tool wie Fiddler , um den Netzwerkverkehr zu sehen.

    
mason 19.09.2014, 14:22
quelle
10

Innerhalb POSTMAN müssen Sie nur die Einstellung in application / json ändern. Siehe Bild unten.

    
Azlan Jamal 14.04.2016 10:06
quelle
3

Verwenden Postman Ihre Web-API zu testen, konfigurieren Sie es Header haben: Content-Type: application / json Da, dass eine POST-Anforderung ist, müssen Sie die rohen json Daten setzen

.     
Json 04.12.2014 09:48
quelle
1

Wahrscheinlich müssen Sie folgende Inhalte in Ihre HTTP Anfrage Kopfzeile einfügen:

%Vor%     
Baqer Naqvi 13.11.2014 10:36
quelle
0

Ich hatte dieses Problem, als ich einen Controller hatte, der zwei verschiedene Modelle in den Params hatte. Die Post-Methode verwendete ein Modell, das nicht im builder.EntitySet angegeben war. Die Art, wie ich das gelöst habe, besteht darin, separate Lese- und Schreib-Controller zu erstellen. Dies entspricht dem CQRS. Obwohl die API-Spezifikationen unordentlicher werden .. Gott sei Dank für Swagger!

    
LastTribunal 18.08.2017 01:59
quelle