2017-09-11 6 views
0

問題のWebフックからhttp応答を取得しようとしました。私はこのエラーを取得しておいてください。Azure関数C#のコンテンツWebhookエラー

"The WebHook request contained invalid JSON: 'No MediaTypeFormatter is available to read an object of type 'JToken' from content with media type 'application/vnd.contentful.management.v1+json"

これは私の機能コードです:

#r "Newtonsoft.Json" 


using System; 
using System.Net; 
using System.IO; 
using System.Collections.Generic; 
using Newtonsoft.Json; 
using System.Net.Http.Headers; 
using System.Net.Http.Formatting; 
using System.Web.Http; 


public static async Task<object> Run(HttpRequestMessage req, TraceWriter log) 
{ 
    @json(body('formdataAction')); 
    log.Info($"wjat"); 

    // req.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 

    log.Info($"Webhook was triggered!"); 
    string jsonContent = await req.Content.ReadAsStringAsync(); 
    // BodyParser.Of(BodyParser.TolerantJson.class); 
    dynamic data = JsonConvert.DeserializeObject(jsonContent); 

    log.Info(data.sys); 

    if (data.first == null || data.last == null) 
    { 
    return req.CreateResponse(HttpStatusCode.BadRequest, new 
    { 
     error = "Please pass first/last properties in the input object" 
    }); 
    } 

    return req.CreateResponse(HttpStatusCode.OK, new 
    { 
     greeting = $"Hello {data.first} {data.last}!" 
    }); 
} 
+0

は、あなたが「contentfulウェブフック」によって何を意味するのか明確にすることはできますか?また、どのような要求をあなたの機能に送りますか?有効なJSONを送信していますか? –

答えて

0

問題はReadAsAsyncは、デフォルトでのみapplication/jsonを可能にするデフォルトのメディアフォーマッタを使用しようとしていることです。

コンテンツの種類にもjsonフォーマッタを使用するように登録することもできますが、NewtonSoft.Jsonを使用してこのようなことをお勧めします。ここで

string json = await req.Content.ReadAsStringAsync(); 
dynamic data = JsonConvert.DeserializeObject(json); 

Contentfulからウェブフックで動作する完全な機能である:

#r "Newtonsoft.Json" 

using System.Net; 
using Newtonsoft.Json; 

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, 
TraceWriter log) 
{ 
    log.Info("C# HTTP trigger function processed a request."); 

    // Get request body 
    string json = await req.Content.ReadAsStringAsync(); 
    log.Info($"Read json: {json}"); 
    dynamic data = JsonConvert.DeserializeObject(json); 

    string deserialized = data?.ToString(); 

    return req.CreateResponse(HttpStatusCode.OK, deserialized); 
} 
+0

私のために働いた解決策は、コンテンツが豊富なウェブフックにURLを入力して、デフォルトの代わりにマスター(ホストキー)を使用するときでした。 – Satyops

関連する問題