GOOGLE ADS

samedi 23 avril 2022

Comment envoyer des données multipart/form à l'API Web ASP.NET Core ?

J'essaie d'envoyer une image et des champs de texte à un point de terminaison API, mais je suis reçu

Type de contenu non pris en charge 'multipart/form-data ; limite=---------------------------81801171514357

Il s'agit d'une API Web ASP.NET Core 2.1. J'ai ceci:

[HttpPost("/api/account"), Authorize]
public void SaveUser(UserModel info)

Et mon modèle:

 [JsonProperty(PropertyName = "avatar")]
[DataType(DataType.Upload)]
public IFormFile Avatar { get; set; }
[JsonProperty(PropertyName = "name")]
[DataType(DataType.Text)]
public string Name { get; set; }

Ensuite j'utilise axios:

 var formData = new FormData();
formData.append("avatar", imageFile);
formData.append("name", name);
axios.post("/api/account", formData);

Je m'attendais à ce que cette méthode s'exécute et ne lève pas d'exception. Mais comment? J'ai essayé d'ajouter:

[Consumes("application/json", "multipart/form-data")]

Mais sans succès.

Puis j'ai essayé:

[HttpPost("/api/account"), Authorize]
public void SaveUser([FromForm]UserModel info)

La méthode s'exécute, mais les propriétés sont vides sur l'objet info:(

MISE À JOUR :
Solution, n'utilisez pas JsonProperty PropertyName. Utilisez le nom de la variable.


Solution du problème

Peut-être devriez-vous essayer de décorer l'entrée du contrôleur et le modèle avec l' [FromForm]attribut ? Voir plus d'informations ici: liaison des paramètres de l'API Web.

Dans l'exemple donné, l'action de votre contrôleur devrait ressembler à ceci :

[HttpPost("/api/account"), Authorize]
public void SaveUser([FromForm]UserModel info)

En modèle:

[FromForm(Name="avatar")]
public IFormFile Avatar { get; set; }
[FromForm(Name="name")]
public string Name { get; set; }

Aucun commentaire:

Enregistrer un commentaire

Comment utiliseriez-vous .reduce() sur des arguments au lieu d'un tableau ou d'un objet spécifique ?

Je veux définir une fonction.flatten qui aplatit plusieurs éléments en un seul tableau. Je sais que ce qui suit n'est pas possible, mais...