2016-03-16 35 views
10

Về cơ bản tôi đang cố gắng để tải lên một hình ảnh cùng với một enum sử dụng Web API 2.Cách tải lên tệp và mô hình bằng API Web?

Dưới đây là chữ ký khiển:

[HttpPost] 
public UploadResponseVm Upload([FromBody]ResImageType type) 
{ 

Có điều là, bất cứ khi nào tôi cố gắng gửi một hình thức nhiều phần dữ liệu (với một tập tin và một loại) tôi nhận được một lỗi 415:

{"Message":"The request entity's media type 'multipart/form-data' is not supported for this resource.","ExceptionMessage":"No MediaTypeFormatter is available to read an object of type 'ResImageType' from content with media type 'multipart/form-data'.","ExceptionType":"System.Net.Http.UnsupportedMediaTypeException","StackTrace":" at System.Net.Http.HttpContentExtensions.ReadAsAsync[T](HttpContent content, Type type, IEnumerable 1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)\r\n at System.Web.Http.ModelBinding.FormatterParameterBinding.ReadContentAsync(HttpRequestMessage request, Type type, IEnumerable 1 formatters, IFormatterLogger formatterLogger, CancellationToken cancellationToken)"}

tôi thậm chí còn thêm dòng sau vào lớp startup.cs tôi:

config.Formatters.Insert(0, new System.Net.Http.Formatting.JsonMediaTypeFormatter()); 

Làm cách nào để tải lên mô hình cùng với tệp bằng bộ điều khiển api trên web?

Trả lời

0

Không có trình định dạng nào có thể xử lý/liên quan đến đối tượng ResImageType của bạn. Tôi đã từng giải quyết một vấn đề tương tự mà không có trình định dạng bằng cách sử dụng phương thức tham số-ít và đã xử lý dữ liệu bên trong phương thức. Ví dụ:

public async Task<HttpResponseMessage> PostFormData() 
    { 
     if (!Request.Content.IsMimeMultipartContent("form-data")) 
     { 
      return Request.CreateResponse(HttpStatusCode.BadRequest); 
     } 

      string upDir= "PathOfDirectory"; 

      MultipartFormDataStreamProvider streamProvider = new MultipartFormDataStreamProvider(upDir);     
      MultipartFileStreamProvider multipartFileStreamProvider = await Request.Content.ReadAsMultipartAsync(streamProvider); 

      // Loop through files. 
      foreach (MultipartFileData file in streamProvider.FileData) 
      { 
       // Save filepaths to DB or do something else 
      } 
      return Request.CreateResponse(HttpStatusCode.OK); 
    } 

giải pháp tương tự từ MS Docs

Một khả năng khác là để tạo ra một lớp DTO giống như được sử dụng để chuyển các đối tượng và sử dụng một định dạng, ví dụ MultipartDataMediaFormatter dường như legit (chưa thử).

Các vấn đề liên quan