我正在尝试使用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--