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