2012-04-07 12 views
2

Mit dem neuen Web-api ist es möglich, einen Haken alle Routen wieASP.NET Web API PUT mit catch-all Route

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

mit der PUT-Methode zu benutzen? Typischerweise wird die PUT Methode wie

public HttpResponseMessage Put(string id, string body) 
{ 
    ... 
} 

verwendet, wo body der Körper der PUT-Anforderung ist. Doch mit einem Rast alle Route, dies scheint nicht zu funktionieren und ich erhalte die Fehlermeldung

{ 
    "ExceptionType":"System.ArgumentException", 
    "Message":":"No 'MediaTypeFormatter' is available to read an object of type 'String' with the media type ''undefined''.", 
    "StackTrace":"..." 
} 

wo meine Methode put wie

public HttpResponseMessage Put(string id) 
{ 
    ... 
} 

sieht Ich denke, ich sollte in der Lage sein, das zu verwenden, fange alle Routen, wo die Routeninformationen an den ID-Parameter übergeben werden und dass ich vom Antwortobjekt aus auf den Rumpf zugreifen kann. Irgendwelche Ideen?

Antwort

2

Ich glaube nicht, dass die Route das Problem ist. Sie sollten mit dieser Route in Ordnung sein, wenn Sie es so schreiben möchten. Sie erhalten diesen Fehler, wenn Sie für den Inhaltstyp, den Sie in der Anfrage senden, keine passende MediaTypeFormatter haben. wenn Sie ein JsonMediaTypeFormatter Zum Beispiel verwenden, müssen Sie sicherstellen, dass Sie

Content-Type: application/json 

in Ihre Anfrage senden. Es sieht nicht wie du aus.

+0

+1 Ich stimme zu - der Inhaltstyp der Anfrage ist hier das Problem. –