Ich erstelle einen Webdienst mithilfe der Web-API. Ich habe eine einfache Klasse implementiert
public class ActivityResult
{
public String code;
public int indexValue;
public int primaryCodeReference;
}
Und dann habe ich in meinem Controller implementiert
[HttpPost]
public HttpResponseMessage Post(ActivityResult ar)
{
return new HttpResponseMessage(HttpStatusCode.OK);
}
Aber wenn ich die API aufrufe, die POST übergibt, wird die Datei json:
{"code":"XXX-542","indexValue":"3","primaryCodeReference":"7"}
Ich erhalte die folgende Fehlermeldung:
{
"Message": "The request entity's media type 'text/plain' is not supported for this resource.",
"ExceptionMessage": "No MediaTypeFormatter is available to read an object of type 'ActivityResult' from content with media type 'text/plain'.",
"ExceptionType": "System.Net.Http.UnsupportedMediaTypeException",
"StackTrace": " in System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n in System.Net.Http.HttpContentExtensions.ReadAsAsync(HttpContent content, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n in System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage request, Type type, IEnumerable`1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)"
}
Was mache ich falsch?
Accept
Header auf setzenapplication/json
. Sie müssen auch denContent-Type
Header auf setzenapplication/json
.Antworten:
In der HTTP-Anforderung müssen Sie den Inhaltstyp auf Folgendes festlegen:
Content-Type: application/json
Wenn Sie also einen Fiddler-Client verwenden, fügen Sie ihn
Content-Type: application/json
dem Anforderungsheader hinzuquelle
Content-Type:application/json
Wenn Sie einen Eingabeparameter für die POST-Anforderungsmethode definieren, der mit folgenden Anmerkungen versehen werden soll
[FromBody]
, z .Alle JSON-Eingabedaten müssen Rohdaten sein .
quelle
Ein weiterer Tipp ... wo Sie "content-type: application / json" ... zum Textfeld auf der Registerkarte "Composer / Parsed" hinzufügen können. Da dort bereits 3 Zeilen ausgefüllt sind, habe ich diesen Inhaltstyp als 4. Zeile hinzugefügt. Das hat die Post zum Laufen gebracht.
quelle
Bitte überprüfen Sie, ob Sie die Methode als
POST
stattdessen als übergeben habenGET
. In diesem Fall erhalten Sie den gleichen Fehler wie oben.quelle
Ich hatte alle meine Einstellungen in der akzeptierten Antwort abgedeckt. Das Problem, das ich hatte, war, dass ich versuchte, den Entity Framework-Entitätstyp "Task" wie folgt zu aktualisieren:
Was für mich funktioniert hat, war, meine eigene Entität "DTOTask" zu erstellen, wie:
quelle
Es erfordert enthalten
Content-Type:application/json
in Web - api Anfrage - Header - Abschnitt , wenn keine Inhalte dann durch Standard erwähnen , es istContent-Type:text/plain
geht auf Anfrage.Der beste Weg, um API auf Postman Tool zu testen.
quelle