单元测试 – 测试ASP.NET Web API多部分表单数据文件上载

前端之家收集整理的这篇文章主要介绍了单元测试 – 测试ASP.NET Web API多部分表单数据文件上载前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用N-UNIT来测试我的Web API应用程序,但我无法找到一种正确的方法来测试我的文件上传方法.哪种方法是测试方法的最佳方法

Web API控制器:

  1. [AcceptVerbs("post")]
  2. public async Task<HttpResponseMessage> Validate()
  3. {
  4. // Check if the request contains multipart/form-data.
  5. if (!Request.Content.IsMimeMultipartContent())
  6. {
  7. return Request.CreateErrorResponse(HttpStatusCode.UnsupportedMediaType,"please submit a valid request");
  8. }
  9. var provider = new MultipartMemoryStreamProvider(); // this loads the file into memory for later on processing
  10. try
  11. {
  12. await Request.Content.ReadAsMultipartAsync(provider);
  13. var resp = new HttpResponseMessage(HttpStatusCode.OK);
  14. foreach (var item in provider.Contents)
  15. {
  16. if (item.Headers.ContentDisposition.FileName != null)
  17. {
  18. Stream stream = item.ReadAsStreamAsync().Result;
  19. // do some stuff and return response
  20. resp.Content = new StringContent(result,Encoding.UTF8,"application/xml"); //text/plain "application/xml"
  21. return resp;
  22. }
  23. }
  24. return resp;
  25. }
  26. catch (System.Exception e)
  27. {
  28. return Request.CreateErrorResponse(HttpStatusCode.InternalServerError,e);
  29. }
  30. }

解决方法

根据您的上述评论,以下是一个示例:
  1. HttpClient client = new HttpClient();
  2.  
  3. MultipartFormDataContent formDataContent = new MultipartFormDataContent();
  4. formDataContent.Add(new StringContent("Hello World!"),name: "greeting");
  5. StreamContent file1 = new StreamContent(File.OpenRead(@"C:\Images\Image1.jpeg"));
  6. file1.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
  7. file1.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data");
  8. file1.Headers.ContentDisposition.FileName = "Image1.jpeg";
  9. formDataContent.Add(file1);
  10. StreamContent file2 = new StreamContent(File.OpenRead(@"C:\Images\Image2.jpeg"));
  11. file2.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
  12. file2.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data");
  13. file2.Headers.ContentDisposition.FileName = "Image1.jpeg";
  14. formDataContent.Add(file2);
  15.  
  16. HttpResponseMessage response = client.PostAsync("http://loclhost:9095/api/fileuploads",formDataContent).Result;

通过电线的请求将是:

  1. POST http://localhost:9095/api/fileuploads HTTP/1.1
  2. Content-Type: multipart/form-data; boundary="34d56c28-919b-42ab-8462-076b400bd03f"
  3. Host: localhost:9095
  4. Content-Length: 486
  5. Expect: 100-continue
  6. Connection: Keep-Alive
  7.  
  8. --34d56c28-919b-42ab-8462-076b400bd03f
  9. Content-Type: text/plain; charset=utf-8
  10. Content-Disposition: form-data; name=greeting
  11.  
  12. Hello World!
  13. --34d56c28-919b-42ab-8462-076b400bd03f
  14. Content-Type: image/jpeg
  15. Content-Disposition: form-data; filename=Image1.jpeg
  16.  
  17. ----Your Image here-------
  18. --34d56c28-919b-42ab-8462-076b400bd03f
  19. Content-Type: image/jpeg
  20. Content-Disposition: form-data; filename=Image2.jpeg
  21.  
  22. ----Your Image here-------
  23. --34d56c28-919b-42ab-8462-076b400bd03f--

猜你在找的asp.Net相关文章