IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

WebService C# - httpost avec fichier et json dans le body ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2017
    Messages : 8
    Par défaut WebService C# - httpost avec fichier et json dans le body ?
    Bonjour,

    est-il possible de passer un fichier et un json dans le body en c# ?

    si oui comment ?

    j'ai essayé ca :

    voici un extrait de mon controller
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    public class CodifBOMModelController : ApiController
        {
            private IModelService _modelServiceInstance = null;
            public CodifBOMModelController() : this(new ModelService())
            {
            }
     
            public CodifBOMModelController(IModelService service)
            {
                _modelServiceInstance = service;
            }
    [HttpPost]
            [Route("api/CodifBOM/Model/UtiliserModel")]
            public async Task<IHttpActionResult> GetFichierTransformerAsync([FromBody] ModelViewModel model)
            {
                try
                {
                        HttpRequestMessage request = this.Request;
                        if (!request.Content.IsMimeMultipartContent())
                        {
                            throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.UnsupportedMediaType));
                        }
     
                        //a tester
                    var rawMessage = await request.Content.ReadAsStringAsync();
     
                        request.Content.LoadIntoBufferAsync().Wait();
                        var filesProvider = await request.Content.ReadAsMultipartAsync();
                        var fileContents = filesProvider.Contents.FirstOrDefault();
                        if (fileContents == null)
                        {
                            return this.BadRequest("Fichier Manquant");
                        }
     
     
                        string cheminFichierTemp = Path.GetTempFileName();
                        FileStream fstream = new FileStream(cheminFichierTemp, FileMode.Create);
                        Stream content = await fileContents.ReadAsStreamAsync();
     
     
                        ViewModelBase<ModelViewModel> result = new ViewModelBase<ModelViewModel>();
     
                        return this.Ok(_modelServiceInstance.CreeFichierAPartirDuModel(model, content));
     
                }
                catch (Exception e)
                {
     
                    throw new JSONException("GET_CORRESPONDANCE_MODEL", "Erreur lors de la récupération des Models", e);
                }
            }
        }
    }
    J'ai plusieurs problèmes.
    1- je ne sais pas si cela est possible
    2- je ne sais pas comment tester avec postman pour envoyer un fichier et des données
    ...

    Précédemment je passais un json dans l'URL mais il semble qu'il y ait une limite de caractères en utilisant cette méthode (limite que j'ai dépassé. (~2200))

    Cdt

  2. #2
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Ce n'est tout simplement pas possible. C'est une limitation du au protocole HTTP. Il ne peut y avoir qu'un seul body, et ce sont ensuite les en-tête qui définisses sa structuration (fichier ou JSON). Impossible d'avoir les deux en même temps.

    Et oui, en paramètre Query, il y a une limitation au niveau de la taille, qui dépend à la fois du navigateur et du serveur.

    Ici, la seule solution serait de modifier le JSON envoyé, pour qu'il représente un objet avec 2 paramètres : l'un pour le contenu JSON initial que tu souhaites transmettre, et l'autre avec le contenu du fichier (par ex. en base64). Ce n'est pas parfait, mais il n'y a pas vraiment d'autres alternatives.

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2017
    Messages : 8
    Par défaut
    Merci, pour la réponse.

    Je vais tenter de tout mettre dans le json.

    Malgré tout, j'aimerai comprendre certaines choses. Est ce que vous pouvez m'éclairer :

    Dans postman il semble possible d'envoyer un fichier et un text dans le body.
    Nom : 2022-11-09 09_17_54-Postman.png
Affichages : 452
Taille : 17,9 Ko

    si je teste et que je regarde ce qui est envoyé avec fiddler j'obtiens ceci :
    Nom : 2022-11-09 09_28_34-fiddler.png
Affichages : 451
Taille : 6,9 Ko

    J'ai l'impression que les informations transitent mais je ne sais pas si cela est "normal" et je ne comprends pas pourquoi ce n'est pas exploitable.

    Cordialement,

  4. #4
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Cela fonctionne sous postman car il fait l'équivalent de ce que je vous recommande. Sauf qu'au lieu d'utiliser du JSON, il utilise des forms data.

    A ce niveau, vous avez :
    - une clé "modelTest" qui contient votre JSON
    - une clé "ficTest" qui contient le fichier à proprement parler.

    Mais le principe reste exactement le même : ce n'est pas 2 corps qui sont passés en paramètre, c'est un corps qui contient les deux informations. C'est juste l'encodage qui change.

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2017
    Messages : 8
    Par défaut
    J'avais clos mais j'ai encore des questions en fait.

    les form-data ne sont-elles pas plus appropriés à ce que je veux faire ?

    Est ce que cela change beaucoup de chose au niveau de l'implémentation en c# ?

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 545
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 545

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 17/09/2015, 00h35
  2. probleme avec une methode static dans le body d'une jsp
    Par amadou.deme dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 19/02/2007, 08h47
  3. Réponses: 10
    Dernier message: 10/05/2006, 10h23
  4. [SQL] Dans un while avec fichier
    Par ozzmax dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 10/02/2006, 20h54
  5. Réponses: 8
    Dernier message: 24/11/2005, 03h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo