c# - Azure 函数错误:Microsoft.Azure.WebJobs.Host:错误索引方法“Function1”。无法将参数“文档”绑定到类型 IAsyncCollector`
问题描述
我是 Azure Function 的新手,在我的第一个函数中我使用的是 CosmosDB。在引擎盖下,函数完美地完成了它的工作,但是当我在门户中打开我的函数时,我收到了这个错误。
函数 (LOANGILITY-AZFUNCTION/ProductDetailsFunc) 错误:Microsoft.Azure.WebJobs.Host:错误索引方法“ProductDetailsFunc”。Microsoft.Azure.WebJobs.Host:无法将参数“文档”绑定到类型 IAsyncCollector`1。确保绑定支持参数类型。如果您正在使用绑定扩展(例如 Azure 存储、ServiceBus、计时器等),请确保您已在启动代码中调用了扩展的注册方法(例如 builder.AddAzureStorage()、builder.AddServiceBus( )、builder.AddTimers() 等)。
我的函数头原型是
public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req,
[DocumentDB(
databaseName: "OB",
collectionName: "ProductDetails",
ConnectionStringSetting = "DBConnection")]IAsyncCollector<dynamic> document,
TraceWriter log)
从我的代码生成的 json 是
{
"generatedBy": "Microsoft.NET.Sdk.Functions-1.0.13",
"configurationSource": "attributes",
"bindings": [
{
"type": "httpTrigger",
"methods": [
"get",
"post"
],
"authLevel": "anonymous",
"name": "req"
}
],
"disabled": false,
"scriptFile": "../bin/Loangility01.dll",
"entryPoint": "Loangility01.ProductDetailsFunc.Run"
}
我还看到了其他一些 SO 问题,他们builder.something
在代码中讨论,我没有使用 .Net Core Azure Function,我的目标项目框架是4.6.1
.
解决方案
根据我的测试,我们可以通过visual studio直接将Function部署到Azure。但是我们需要在 local.settings.json 中手动配置一些设置,例如 Cosmos Db 连接字符串。详细步骤如下
- 开发我的代码:
public static class Function2
{
[FunctionName("Function2")]
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, [DocumentDB(
databaseName: "ToDoItems",
collectionName: "Items",
ConnectionStringSetting = "CosmosDBConnection")]IAsyncCollector<dynamic> toDoItemsOut, 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;
if (name == null)
{
// Get request body
dynamic data = await req.Content.ReadAsAsync<object>();
name = data?.name;
}
HttpResponseMessage response ;
if (name == null) {
response = req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body");
}
else {
response= req.CreateResponse(HttpStatusCode.OK, "Hello " + name);
}
await toDoItemsOut.AddAsync(response.Content);
return response;
}
}
推荐阅读
- logstash - 通信 filebeat --> logstash: 消息顺序错误
- c# - 带有 params 关键字的泛型重载导致递归调用
- spring - 具有重叠配置的 Spring Security 在多个检查授权
块 - scala - 数据集到数据帧的转换
- amazon-web-services - 如何从 Auto Scaling 组中删除公共 IP 自动设置?
- typescript - Typescript - 通过接口迭代
- asp.net - 如何使用 Linq where 条件检查字符串列表是否包含任何字符串
- code.org - 如何在应用实验室中使用自然语言处理 (AI)?
- java - Spring Batch:读取器、处理器和写入器启动时记录
- javascript - Javascript WebSpeech API 实现和配额(Chrome、Edge、Safari)