尝试创建一个HttpTrigger v2 Azure函数,该函数具有CosmosDB竞标,它将使用SqlQuery从路由数据中查找ID。这与微软这里提供的例子非常相似。我正在使用VS代码开发这个函数。以下是代码:
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using System.Collections.Generic;
namespace some_namespace
{
public static class GetUser
{
[FunctionName("GetUser")]
public static IActionResult Run(
[HttpTrigger(
AuthorizationLevel.Anonymous,
"get",
Route = "user/{id}")] HttpRequest req,
[CosmosDB(
"DbName",
"Users",
ConnectionStringSetting = "CosmosDBConnection",
SqlQuery = "select * from Users u where u.id = {id}")]
IEnumerable<User> users,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
foreach (User user in users)
{
log.LogInformation(user.id);
}
return new OkResult();
}
}
}在另一个文件中定义了User类。所有的编译都很好,我可以将它上传到Azure,但是当我导航到函数时,我会得到以下错误:
函数(./GetUser)错误: Microsoft.Azure.WebJobs.Host:错误索引方法'GetUser‘。System.Private.CoreLib:无法加载文件或程序集'Microsoft.Azure.WebJobs.Extensions.CosmosDB,Version=3.0.4.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35‘。无法找到或加载特定文件。(HRESULT除外: 0x80131621)。System.Private.CoreLib:无法加载文件或程序集'Microsoft.Azure.WebJobs.Extensions.CosmosDB,Version=3.0.4.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35‘。
我已经修改了我的host.json文件,使其包括了ExtensionBundle,如这文章所示,目前它如下所示:
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[1.*, 2.0.0)"
}
}上面的内容应该自动地包含对CosmosDB扩展的引用,但我的函数似乎没有,或者我遗漏了其他东西,但不知道是什么。
发布于 2019-09-12 19:26:39
尝试将Microsoft.Azure.WebJobs.Extensions.CosmosDB安装为NuGet包。
ExtensionBundle似乎是为了当地的发展。
发布于 2019-09-13 14:02:00
我不知道是什么修复了上面的功能来使它工作。有一次,我为使用Microsoft.Azure.WebJobs.Extensions.CosmosDB添加了一个冗余导入,但随后我删除了它,该函数仍然工作。上面的代码不会返回已找到的对象-下面是一个经过修改的工作函数(不需要对每个返回的用户进行日志记录,但我把它放在那里进行调试):
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using System.Collections.Generic;
namespace some_namespace
{
public static class GetUser
{
[FunctionName("GetUser")]
public static IActionResult Run(
[HttpTrigger(
AuthorizationLevel.Anonymous,
"get",
Route = "user/{id}")] HttpRequest req,
[CosmosDB(
"DbName",
"Users",
ConnectionStringSetting = "CosmosDBConnection",
SqlQuery = "select * from Users u where u.id = {id}")]
IEnumerable<User> users,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
foreach (User user in users)
{
log.LogInformation(user.id);
}
return new OkObjectResult(users);
}
}
}https://stackoverflow.com/questions/57912441
复制相似问题