it-swarm.com.de

Fehler beim Senden von Json POST zum Web-API-Dienst

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?

83
GVillani82

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

175
beaumondo

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.

1
john santora

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)
0

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.

0
Kiran Sagvekar

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.

0
sudheer kondala
  1. Sie müssen die Header-Eigenschaft Content-Type:application/json hinzufügen.
  2. 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);
    }
    
  3. JSON-Eingabedaten müssen raw data sein.

0
Kiran Sagvekar