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 anrufe, die in POST die Datei json übergibt:
{"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?
In der HTTP-Anforderung müssen Sie Content-Type auf Folgendes festlegen: Content-Type: application/json
Wenn Sie den Fiddler-Client verwenden, fügen Sie dem Anforderungskopf Content-Type: application/json
hinzu
ein weiterer Tipp ... wo Sie "content-type: application/json" ... in das Textfeld auf der Registerkarte Composer/Parsed einfügen können. Dort sind bereits drei Zeilen ausgefüllt, daher habe ich diesen Content-Typ als vierte Zeile hinzugefügt. Das hat die Post zum Laufen gebracht.
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" zu aktualisieren, wie:
public IHttpActionResult Post(Task task)
Was für mich funktionierte, war die Erstellung einer eigenen Entität "DTOTask" wie:
public IHttpActionResult Post(DTOTask task)
Es ist erforderlich, Content-Type:application/json
in den Header der Web-API-Anforderungsheader einzuschließen, wenn keine Inhalte erwähnt werden. Standardmäßig wird Content-Type:text/plain
an die Anforderung übergeben.
Bester Weg, um ein API auf Postman-Tool zu testen.
Bitte überprüfen Sie, ob Sie die Methode als POST
statt als GET
. Übergeben haben. Wenn dies der Fall ist, erhalten Sie dieselbe Fehlermeldung wie oben beschrieben.
$http({
method: 'GET',
Der Medientyp "Text/Plain" der Anforderungsentität wird für .__ nicht unterstützt. diese Ressource.
Content-Type:application/json
hinzufügen.Wenn Sie einen Eingabeparameter für die Anforderungsmethode POST definieren, der als [FromBody]
, kommentiert werden soll, z. :
[HttpPost]
public HttpResponseMessage Post([FromBody]ActivityResult ar)
{
return new HttpResponseMessage(HttpStatusCode.OK);
}
JSON-Eingabedaten müssen raw data sein.