2012-10-15 30 views
8

mô hình:là nó có thể có modelbinding trong asp.net webapi với tập tin tải lên?

public class UploadFileModel 
{ 
    public int Id { get; set; } 
    public string FileName { get; set; } 
    public HttpPostedFileBase File { get; set; } 
} 

bộ điều khiển:

public void Post(UploadFileModel model) 
{ 
    // never arrives... 
} 

Tôi nhận được một lỗi

"Không MediaTypeFormatter có sẵn để đọc một đối tượng kiểu 'UploadFileModel' từ nội dung với loại phương tiện 'multipart/form-data'. "

Vẫn còn điều này?

Trả lời

6

Nó không phải là dễ dàng có thể. Mô hình ràng buộc trong Web API về cơ bản là khác nhau hơn trong MVC và bạn sẽ phải viết một MediaTypeFormatter mà sẽ đọc dòng của các tập tin vào mô hình của bạn và bổ sung ràng buộc nguyên thủy có thể được thử thách đáng kể.

Giải pháp đơn giản nhất là để lấy các dòng tập tin ra khỏi yêu cầu sử dụng một số loại MultipartStreamProvider và các thông số khác sử dụng FormData tên bộ sưu tập giá trị ra khỏi nhà cung cấp mà

Ví dụ - http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-2:

public async Task<HttpResponseMessage> PostFormData() 
{ 
    if (!Request.Content.IsMimeMultipartContent()) 
    { 
     throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); 
    } 

    string root = HttpContext.Current.Server.MapPath("~/App_Data"); 
    var provider = new MultipartFormDataStreamProvider(root); 

    try 
    { 
     await Request.Content.ReadAsMultipartAsync(provider); 

     // Show all the key-value pairs. 
     foreach (var key in provider.FormData.AllKeys) 
     { 
      foreach (var val in provider.FormData.GetValues(key)) 
      { 
       Trace.WriteLine(string.Format("{0}: {1}", key, val)); 
      } 
     } 

     return Request.CreateResponse(HttpStatusCode.OK); 
    } 
    catch (System.Exception e) 
    { 
     return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e); 
    } 
} 
+0

ok, cảm ơn! và cũng cảm ơn cho trang web của bạn – user10479

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