2013-07-18 10 views
7

मैं अपने वेब एपीआई एप्लिकेशन का परीक्षण करने के लिए एन-यूनिट का उपयोग करने की कोशिश कर रहा हूं लेकिन मैं अपनी फ़ाइल अपलोड विधि का परीक्षण करने का एक उचित तरीका नहीं ढूंढ पा रहा हूं। विधि का परीक्षण करने के लिए सबसे अच्छा तरीका कौन सा होगा?परीक्षण एएसपी.नेट वेब एपीआई मल्टीपार्ट फॉर्म डेटा फ़ाइल अपलोड

वेब एपीआई नियंत्रक:

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

उत्तर

3

समय का एक सा खर्च WebClient में देख मैं इस के साथ आने में सक्षम था के बाद:

 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

क्यों System.Net.Http से HttpClient का उपयोग नहीं? –

+0

मुझे नहीं लगता कि HttpClient में एक अपलोड फ़ाइल है जो विशेष रूप से फ़ाइल अपलोड करने के लिए डिज़ाइन की गई है। – Muhammad

17

अपने ऊपर टिप्पणी के आधार पर निम्न एक उदाहरण है :

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; 

तार पर अनुरोध करना चाहते हैं:

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

मैं एक साधारण समाधान की तलाश में था, यह बहुत सी चीजों को जटिल कर सकता है – Muhammad

+0

यह बहुत अच्छा काम करता है और इसे संभालने में आसान है, धन्यवाद !! –

संबंधित मुद्दे