我正在尝试使用N-UNIT来测试我的Web API应用程序,但我无法找到一种正确的方法来测试我的文件上传方法.哪种方法是测试方法的最佳方法?
Web 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);
- }
- }
解决方法
根据您的上述评论,以下是一个示例:
- 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--