2012-10-15 6 views
8

das Modell:ist es möglich, Modelbinding in asp.net Webapi mit hochgeladenen Datei?

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

der Controller:

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

Ich erhalte eine Fehlermeldung

„Nein MediaTypeFormatter ist verfügbar ein Objekt vom Typ 'UploadFileModel' von Inhalt zu lesen mit Medientyp 'Multipart/Formulardaten'. "

Gibt es das überhaupt?

Antwort

6

Es ist nicht leicht möglich. Die Modellbindung in der Web-API unterscheidet sich grundlegend von der in MVC, und Sie müssten einen MediaTypeFormatter schreiben, der den Datenstrom in Ihr Modell liest und zusätzlich Primitive bindet, was eine große Herausforderung darstellen kann.

Die einfachste Lösung ist die Datei-Stream von der Anforderung mit irgendeiner Art von MultipartStreamProvider und die anderen Parameter mit FormData Name Werterfassung aus, dass die Anbieter

Beispiel zu greifen - 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, danke! und auch danke für deine Seite – user10479

Verwandte Themen