2017-08-08 4 views
2

Ich habe eine Azure-Funktion erstellt, und ich bin es lokal ausgeführt:Azure Funktionen Modell Bindung

[FunctionName("HttpTriggerCSharpSet")] 
public static async Task<HttpResponseMessage> Set([HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] MyDocument req, TraceWriter log) 
{ 
    // ... 
} 

Beachten Sie, dass MyDocument der erste Parameter statt HttpRequestMessage ist. Ich habe in der Dokumentation gelesen, dass dieser Ansatz funktionieren sollte, und er scheint der ASP.NET-Modellbindung sehr ähnlich zu sein (in meinen Augen sowieso). MyDocument ist ein POCO mit nur 3 Eigenschaften.

public class MyDocument 
{ 
    public string Name { get; set; } 
    public int ShoeSize { get; set; } 
    public decimal Balance { get; set; } 
} 

Wenn ich auf die Funktion POST wie so (ich verwende Postman):

POST with Postman to Azure Function

Ich erhalte eine Fehlermeldung: [8/8/2017 2:21:07 PM] Exception while executing function: Functions.HttpTriggerCSharpSet. Microsoft.Azure.WebJobs.Host: Exception binding parameter 'req'. System.Net.Http.Formatting: No MediaTypeFormatter is available to read an object of type 'MyDocument' from content (die Sie auch im Screenshot von Postman sehen oben)

Ich habe versucht, Form-Daten und x-www-Form-urlencoded und sogar roh von Postman, gleichen Fehler jedes Mal. Ich habe auch versucht, zurück zu HttpRequestMessage und mit req.Content.ReadAsAsync<MyDocument>, und ich bekomme einen ähnlichen Fehler. Bricht ich meinen POST falsch oder schreibe ich meine Azure-Funktion falsch? In beiden Fällen, was ist der richtige Weg?

Antwort

5

Achten Sie auf die Kopfzeile angeben:

Content-Type: application/json 

dann die folgenden Körper für Ihren Code funktionieren sollte:

{ 
    "Name": "myUserName", 
    "Balance": 123.0, 
    "ShoeSize": 30 
} 
+0

es JSON sein muss, die zu einer Azure-Funktion vorgelegt wird? Formular codiert funktioniert nicht? Ist das irgendwo dokumentiert, wo ich es nicht bemerkt habe? –

+0

(es funktioniert, FYI) –