J'essaie d'avoir une application de console pour envoyer un fichier XML à une application Web développée dans ASP.NET MVC 3 et recevez une autre XML comme réponse.
L'erreur renvoyée dans l'application de la console est la suivante: p>
Le serveur distant renvoyé une erreur: (500) Erreur de serveur interne. P> BlockQuote>
Quand je reçois Fiddler2 en cours d'exécution, je vois cette erreur: p>
Référence d'objet non définie sur une instance d'un objet. p> blockQuote>
Le code de l'application de la console est le suivant: p>
xxx pré> Le code dans le contrôleur MVC est le suivant: p>
[HttpPost] public ActionResult Test(HttpPostedFileBase file) { XElement xml = XElement.Load(new System.IO.StreamReader(file.InputStream)); var test = new MyTest(); return File(test.RunTest(xml), "text/xml", "testresult.xml"); }
3 Réponses :
Votre problème est que webClient.uploadfile ne pose pas de formulaire avec l'ENCTYPE défini sur multipart / form-données à l'aide d'une entrée nommée "Fichier" pour MVC pour mapper. Essayez de modifier la méthode latérale de votre serveur à ceci:
[HttpPost] public ActionResult Test() { var file = Request.Files[0] as HttpPostedFile; XElement xml = XElement.Load(new System.IO.StreamReader(file.InputStream)); var test = new MyTest(); return File(test.RunTest(xml), "text/xml", "testresult.xml"); }
Ça a marché! J'ai juste besoin de supprimer le comme httppostedfile code>, il ne compilait pas ... merci beaucoup!
Je sais que cette question est ancienne, mais à utiliser la demande, je reçois les erreurs que la "demande" de noms est introuvable.
Vous devez passer le nom du paramètre avec fichier téléchargé. Ce n'est pas possible avec WebClient. P>
vérifier p>
Envoyer la demande de type de contenu multipart / formulaire de formulaire a> p>
Nice liens; Au fait, le lien n'a pas besoin de travailler avec une forme, juste avec cette demande, la réponse de Chris est donc exactement ce dont j'avais besoin. Mais merci quand même! =)
Si quelqu'un a le problème légèrement différent mais connexe:
J'ai également dû le faire à l'aide de la fonction On peut simplement écrire: p> plus facile! ;) p> p> uploaddata code> au lieu de
upérfile code>. Dans ce cas, au lieu d'écrire dans le contrôleur: p>