使用 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);
}
我想创建一个 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);
}