使用 CosmosDB 文档输出创建 HttpTrigger Azure 函数时出错

Error creating HttpTrigger Azure Function with CosmosDB document output

我想创建一个 Azure Functions,它接受传递给它的 JSON 主体并将该文档插入到 Azure COSMOSDB 实例中。

为此,我在 Azure Functions 门户中创建了这个函数:

并像这样实现函数:

#r "Newtonsoft.Json"
using Newtonsoft.Json.Linq;

using System.Net;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log, object outputDocument)
{
    var requestContent = await req.Content.ReadAsStringAsync();
    log.Verbose($@"Received request:\n{requestContent}");

    var newDoc = JObject.Parse(requestContent);
    newDoc["Id"] = Guid.NewGuid().ToString();
    newDoc["shardKey"] = newDoc.Value<string>(@"Id").Substring(8);

    outputDocument = newDoc;

    return req.CreateResponse(System.Net.HttpStatusCode.Created);
}

在门户中,我放入了一个简单的示例文档:

{
  "prop1": 2,
  "prop2": "2017-02-20",
}

然后单击 'Run'

我马上就遇到了

作为门户中的叠加层 IDE 以及

{
  "id": "145ee924-f824-4064-8364-f96dc12ab138",
  "requestId": "5a27c287-2c91-40f5-be52-6a79c7c86bc2",
  "statusCode": 500,
  "errorCode": 0,
  "message": "'UploadDocumentToCosmos' can't be invoked from Azure WebJobs SDK. Is it missing Azure WebJobs SDK attributes?"
}

在日志区。

我似乎无能为力解决这个问题,但我确实觉得我做的一切都是对的。

我需要做什么才能简单地将 JSON 对象作为对 Azure 函数的 HTTP 请求,并将 insert/upsert 所述对象放入 Azure Cosmos DB 实例?

你能试试把 out 添加到 dynamic outputDocument 吗?

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log, out dynamic outputDocument)

对于异步函数,您应该使用 IAsyncCollector:

public static async Task<HttpResponseMessage> Run(
    HttpRequestMessage req, TraceWriter log, 
    IAsyncCollector<object> outputDocuments)
{
    ...
    await outputDocuments.AddAsync(newDoc);
}