web-dev-qa-db-fra.com

Instance 'HttpContent' invalide fournie. Il n'a pas d'en-tête de type de contenu 'multipart' avec un paramètre 'frontière'

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.

Postman screenshot

quelqu'un peut-il m'aider?

14
Hamid

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:  enter image description here  enter image description here

Postman sait définir le type de contenu et la limite, car vous définissez uniquement le type de contenu

10
Popa Andrei

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();
0
Ramy Mohamed