2017-12-02 5 views
0

Hallo Iam neu zu Azure Funktionen ich benutze VS 2017 15.4 und running helloworld Funktion app auf lokale. Ich konnte Anfrage auf diese Funktion erhalten, aber wenn ich Post auf demselben uri gebe, gibt es.Azure Funktionen nach Ausgabe

mscorlib: Ausnahme beim Ausführen der Funktion: HelloWorld. System.Net.Http.Formatting: Es ist kein MediaTypeFormatter verfügbar, um ein Objekt vom Typ 'Object' aus einem Inhalt mit dem Medientyp 'application/octet-stream' zu lesen.

können Sie mir sagen, was ich vergessen habe fette Zeile gibt Problem in Post-Anfrage, versuchte ich mit ContentType und ohne ContentType; mit Körper und ohne Körper.

Wie kann ich Json-Objekt im Anfragetext in azure-Funktion analysieren. Ein Weg, den ich konnte war, es in String zu analysieren und dann mit jsonconvert zu deserialisieren. ist sie ein besserer Weg, es wie valueproviders Modelbinder usw. zu tun, ist auf application/json

[FunctionName("HelloWorld")] 
public static async Task Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log) 
{ 
log.Info("C# HTTP trigger function processed a request."); 

     // parse query parameter 
     string name = req.GetQueryNameValuePairs() 
      .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0) 
      .Value; 

     // Get request body 
     *dynamic data = await req.Content.ReadAsAsync<object>();* 

     // Set name to query string or body data 
     name = name ?? data?.name; 

     return name == null 
      ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body") 
      : req.CreateResponse(HttpStatusCode.OK, "Hello " + name); 
    }. 

Antwort

0

Diese Arbeit sollte die Content-Type Header auf Ihrer HTTP-Anforderung angenommen wird.

Beachten Sie, dass, wenn der Wert des Headers multipart/form-data ist, dies ein bekannter Fehler ist dokumentiert here.

+0

das für mich funktionierte, gibt es eine Möglichkeit, dass ich meine JSON in Klasse analysieren kann, habe ich versucht, es in Zeichenfolge zu analysieren und dann deserialize mit jsonconvert.deserialize kann es automatisch erfolgen. – Rakesh

+0

Wenn Sie eine Klasse mit dem Typ 'SampleType' haben, sollte' req.Content.ReadAsAsync () 'in' req.Content.ReadAsAsync () 'geändert werden. –

0

Wie Connor sagte, solange der Content-Type Header in Ihrer Anfrage auf application/json gesetzt ist, wird dieser Code gut funktionieren. Ein Problem, auf das ich gestoßen bin, ist, dass die Funktion zum Hinzufügen von Kopfzeilen beim Testen von azure-Funktionen in azure portal in diesem Fall nicht zu funktionieren scheint.

Wenn Sie eine Anfrage an Ihre Funktion außerhalb des Testbereichs von azure-Funktionen senden können, sollte dies gut funktionieren.