Je crée un service Web à l'aide de l'API Web. J'ai implémenté une classe simple
public class ActivityResult
{
public String code;
public int indexValue;
public int primaryCodeReference;
}
Et puis j'ai implémenté dans mon contrôleur
[HttpPost]
public HttpResponseMessage Post(ActivityResult ar)
{
return new HttpResponseMessage(HttpStatusCode.OK);
}
Mais quand j'appelle l'API en passant en POST le fichier json:
{"code":"XXX-542","indexValue":"3","primaryCodeReference":"7"}
J'obtiens le message d'erreur suivant:
{
"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)"
}
Qu'est-ce que je fais mal?
Accept
tête que surapplication/json
. Vous devez également définir l'en-Content-Type
tête surapplication/json
.Réponses:
Dans la requête HTTP, vous devez définir Content-Type sur:
Content-Type: application/json
Donc, si vous utilisez un client fiddler, ajoutez
Content-Type: application/json
à l'en-tête de la demandela source
Content-Type:application/json
Lorsque vous définissez un paramètre d'entrée de méthode de requête POST qui doit être annoté comme
[FromBody]
, par exemple :Toutes les données d'entrée JSON doivent être des données brutes .
la source
autre astuce ... où ajouter "content-type: application / json" ... au champ de zone de texte sur l'onglet Composer / Parsed. Il y a 3 lignes déjà remplies ici, j'ai donc ajouté ce type de contenu comme 4ème ligne. Cela a fait fonctionner la poste.
la source
Veuillez vérifier si vous passiez la méthode comme à la
POST
placeGET
. si c'est le cas, vous obtiendrez la même erreur que celle que vous avez publiée ci-dessus.la source
J'avais tous mes paramètres couverts dans la réponse acceptée. Le problème que j'ai eu était que j'essayais de mettre à jour le type d'entité Entity Framework «Tâche» comme:
Ce qui a fonctionné pour moi a été de créer ma propre entité "DTOTask" comme:
la source
Il doit être inclus
Content-Type:application/json
dans la section d'en-tête de demande de l'API Web lorsqu'il ne mentionne aucun contenu, alors par défaut, il estContent-Type:text/plain
transmis à la demande.Meilleur moyen de tester l'API sur l'outil Postman.
la source