J'écris une API Web qui utilise une méthode de publication acceptant les fichiers téléchargés à partir de l'interface utilisateur.
public async Task<List<string>> PostAsync()
{
if (Request.Content.IsMimeMultipartContent("form-data"))
{
string uploadPath = HttpContext.Current.Server.MapPath("~/uploads");
var streamProvider = new MyStreamProvider(uploadPath);
await Request.Content.ReadAsMultipartAsync(streamProvider);
return streamProvider.FileData
.Select(file => new FileInfo(file.LocalFileName))
.Select(fi => "File uploaded as " + fi.FullName + " (" + fi.Length + " bytes)")
.ToList();
}
else
{
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.BadRequest, "Invalid Request!");
throw new HttpResponseException(response);
}
}
alors je poste une demande à l'action ci-dessus par le facteur. Je règle l'en-tête de type de contenu sur multipart/form-data mais une erreur se produit pendant l'exécution de l'action. Corps du message :
"Instance" HttpContent "non valide fournie. Elle ne possède pas d'en-tête de type de contenu" multipart "avec un paramètre" frontière ".\R\nNom du paramètre: contenu"
je suis allé aux en-têtes de postier mais j'ai trouvé que l'en-tête de demande contenu-type dans était défini sur application-json.
quelqu'un peut-il m'aider?
Vous regardez sur l'en-tête de réponse qui est au format JSON et c'est bon pour vous.
Votre vrai problème est lié à la requête du facteur, supprimez simplement l'entrée 'Content-Type: multipart/form-data' de l'en-tête de la requête. Il suffit de télécharger un fichier sous forme de données de formulaire et d'envoyer la demande .
Regardez ce qui se passe lorsque vous définissez le type de contenu manuellement ou non:
Postman sait définir le type de contenu et la limite, car vous définissez uniquement le type de contenu
Premier : Postman a un bogue dans la gestion des requêtes basées sur des fichiers.
Vous pouvez essayer d'ajouter ceci à votre WebApiConfig.cs
cela a fonctionné pour moi:
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();