2013-07-18 54 views
7

Tôi đang cố gắng sử dụng N-UNIT để kiểm tra ứng dụng API web của tôi nhưng tôi không thể tìm được cách thích hợp để kiểm tra phương pháp tải lên tệp của tôi. Đó sẽ là phương pháp tốt nhất để kiểm tra phương pháp?Thử nghiệm ASP.NET Web API Tệp ​​Dữ liệu Biểu mẫu Multipart tải lên

điều khiển API

Web:

[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); 
     } 
    } 

Trả lời

3

Sau khi dành một chút thời gian nhìn vào WebClient tôi đã có thể đưa ra với điều này:

 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

tại sao không sử dụng HttpClient từ System.Net.Http? –

+0

Tôi không nghĩ HttpClient có tệp tải lên được thiết kế đặc biệt để tải lên tệp. – Muhammad

17

Dựa trên nhận xét trên của bạn, sau đây là một ví dụ :

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; 

Yêu cầu qua dây điện như sau:

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

Tôi đã tìm kiếm một giải pháp đơn giản, điều này có thể làm phức tạp rất nhiều thứ – Muhammad

+0

Nó hoạt động tuyệt vời và dễ dàng để xử lý, cảm ơn !! –