2012-04-07 5 views
0

Ich sende eine Multipart/Form-Datenanforderung an eine Aktion (Datei-Upload), aber ich sende es an eine Aktion, die die ID hat als die URL der Route angegeben:Asp.net WebApi Multipart/Formulardaten mit ID aus Routendefinition

routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "api/{controller}/{id}/{action}", 
    defaults: new {action = "Index", id = RouteParameter.Optional } 
); 

URL ich poste auf: /api/Contacts/1/Photo

Aktion:

[HttpPost] 
public HttpResponseMessage Photo(int id) 
{ 

    var task = this.Request.Content.ReadAsStreamAsync(); 
    task.Wait(); 
    Stream requestStream = task.Result; 

    /* ... */ 

} 

Mit dem id-Parameter, bekomme ich diesen Fehler: No 'MediaTypeFormatter' is available to read an object of type 'Int32' with the media type 'multipart/form-data'. Ohne die id pa Rameter, es funktioniert gut.

Ich versuchte ein MediaTypeFormatter in dieser Antwort here, aber es scheint nicht, die ID von der URL zu bekommen und stürzt ab, wenn man versucht, es mit FirstDispositionNameOrDefault("id") zu bekommen. Gibt es eine Möglichkeit, die in der Routen-URL angegebene ID an den ID-Parameter für die Aktion zu binden?

Antwort

2

FirstDispositionNameOrDefault dient zum Lesen der Werte von Formularsteuerelementen.

können Sie die Verwendung [FromUri] Attribut auf den Parameter:

public HttpResponseMessage Photo([FromUri] int id) 

Dies teilt Web API nicht den Parameter aus dem Nachrichtentext zu erhalten.

+1

+1. Vielen Dank. Aber sicherlich ist der Formatierungsfehler ** wirklich irreführend **. Das Problem ist nicht der Formatierer, sondern scheint die Aktion zu lösen. – Aliostad