2013-07-18 17 views
7

Sto cercando di utilizzare N-UNIT per testare la mia applicazione API Web ma non riesco a trovare un modo corretto per testare il metodo di caricamento del mio file. Quale sarebbe l'approccio migliore per testare il metodo?Test di ASP.NET Web API Caricamento file dati modulo multiplo

Web controller API:

[AcceptVerbs("post")] 
public async Task<HttpResponseMessage> Validate() 
    { 
     // Check if the request contains multipart/form-data. 
     if (!Request.Content.IsMimeMultipartContent()) 
     { 
      return Request.CreateErrorResponse(HttpStatusCode.UnsupportedMediaType,"please submit a valid request"); 
     } 
     var provider = new MultipartMemoryStreamProvider(); // this loads the file into memory for later on processing 
     try 
     { 
      await Request.Content.ReadAsMultipartAsync(provider); 
      var resp = new HttpResponseMessage(HttpStatusCode.OK); 
      foreach (var item in provider.Contents) 
      { 
       if (item.Headers.ContentDisposition.FileName != null) 
       { 
        Stream stream = item.ReadAsStreamAsync().Result; 
     // do some stuff and return response 
        resp.Content = new StringContent(result, Encoding.UTF8, "application/xml"); //text/plain "application/xml" 
        return resp; 
       } 
      } 
       return resp; 
     } 
     catch (System.Exception e) 
     { 
      return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e); 
     } 
    } 

risposta

3

Dopo aver trascorso un po 'di tempo a guardare in WebClient sono stato in grado di venire con questo:

 try 
     { 
      var imageFile = Path.Combine("dir", "fileName"); 
      WebClient webClient = new WebClient(); 
      byte[] rawResponse = webClient.UploadFile(string.Format("{0}/api/values/", "http://localhost:12345/"), imageFile); 
      Console.WriteLine("Sever Response: {0}", System.Text.Encoding.ASCII.GetString(rawResponse)); // for debugging purposes 
      Console.WriteLine("File Upload was successful"); 
     } 
     catch (WebException wexc) 
     { 
      Console.WriteLine("Failed with an exception of " + wexc.Message); 
      // anything other than 200 will trigger the WebException 

     } 
+0

perché non utilizzare HttpClient da System.Net.Http? –

+0

Non penso che HttpClient abbia un file di upload progettato specificamente per il caricamento di file. – Muhammad

17

Sulla base della sua commento di cui sopra, segue è un esempio :

HttpClient client = new HttpClient(); 

MultipartFormDataContent formDataContent = new MultipartFormDataContent(); 
formDataContent.Add(new StringContent("Hello World!"),name: "greeting"); 
StreamContent file1 = new StreamContent(File.OpenRead(@"C:\Images\Image1.jpeg")); 
file1.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); 
file1.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data"); 
file1.Headers.ContentDisposition.FileName = "Image1.jpeg"; 
formDataContent.Add(file1); 
StreamContent file2 = new StreamContent(File.OpenRead(@"C:\Images\Image2.jpeg")); 
file2.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); 
file2.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data"); 
file2.Headers.ContentDisposition.FileName = "Image1.jpeg"; 
formDataContent.Add(file2); 

HttpResponseMessage response = client.PostAsync("http://loclhost:9095/api/fileuploads", formDataContent).Result; 

La richiesta sul filo vorrebbe:

POST http://localhost:9095/api/fileuploads HTTP/1.1 
Content-Type: multipart/form-data; boundary="34d56c28-919b-42ab-8462-076b400bd03f" 
Host: localhost:9095 
Content-Length: 486 
Expect: 100-continue 
Connection: Keep-Alive 

--34d56c28-919b-42ab-8462-076b400bd03f 
Content-Type: text/plain; charset=utf-8 
Content-Disposition: form-data; name=greeting 

Hello World! 
--34d56c28-919b-42ab-8462-076b400bd03f 
Content-Type: image/jpeg 
Content-Disposition: form-data; filename=Image1.jpeg 

----Your Image here------- 
--34d56c28-919b-42ab-8462-076b400bd03f 
Content-Type: image/jpeg 
Content-Disposition: form-data; filename=Image2.jpeg 

----Your Image here------- 
--34d56c28-919b-42ab-8462-076b400bd03f-- 
+0

Stavo cercando una soluzione semplice che possa complicare molte cose – Muhammad

+0

Funziona alla grande e è facile da gestire, grazie !! –

Problemi correlati