azure - 使用 DocumentDB(客户端库)在本地测试 Azure Functions,并针对 1.13.2 到 1.17.0 接收 'Invalid API version'

标签 azure azure-functions azure-cosmosdb

我正在使用 VS2017(预览版 7.1)在本地测试 Azure Functions。该函数使用模拟器 (1.11.136.2) 在本地写入 DocumentDB,并且在使用 Microsoft.Azure.DocumentDB 1.13.1 时一切正常。一旦我升级到任何较新的版本(1.13.2 到 1.17.0),我就会收到以下错误:

Invalid API version. Ensure a valid x-ms-version header value is passed.

从 Postman 调用该函数时,我添加了一个 x-ms-version: 2017-02-22 header ,但我怀疑这只是 REST API 所必需的。

using Microsoft.Azure.Documents;
using Microsoft.Azure.Documents.Client;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;
using System;
using System.Configuration;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;

namespace AzureFunction
{
public static class Function1
{

    private static readonly ConnectionPolicy connectionPolicy =
        new ConnectionPolicy
        {
            UserAgentSuffix = " tilt",
            ConnectionMode = ConnectionMode.Direct,
            ConnectionProtocol = Protocol.Tcp,
             EnableEndpointDiscovery = false,                                   
        };

    [FunctionName("FunctionApp")]
    public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = "func/app")]HttpRequestMessage req, TraceWriter log)
    {

        string setting = ConfigurationManager.AppSettings["DOCUMENTDB"];

        string databaseName = "test1";

        Tuple<Uri, string> conn = Connection(setting);
        using (var client = new DocumentClient(conn.Item1, conn.Item2, connectionPolicy))
        {

            // error thrown at next line
            await client.CreateDatabaseIfNotExistsAsync(new Database { Id = databaseName });
        }

        return req.CreateResponse(HttpStatusCode.OK);

    }

    static Tuple<Uri, string> Connection(string configSetting)
    {
        string[] setting = configSetting.Split(';');
        string endpoint = setting[0].Split('=')[1];
        string key = setting[1].Split('=')[1] + "==";
        var t = new Tuple<Uri, string>(new Uri(endpoint), key);
        return t;
    }
}
}

我可以继续使用 1.13.1,但我想开始使用与此版本不兼容的 Graph DB。

为什么我在客户端库中收到此错误,为什么仅从版本 1.13.2 开始?

最佳答案

事实证明模拟器版本不正确。对于 Microsoft.Azure.DocumentDB 1.14.0 及更高版本,需要 Azure DocumentDB Emulator 1.13.58.2,我从此处安装 https://chocolatey.org/packages/azure-documentdb-emulator .

似乎是这个网站https://learn.microsoft.com/en-us/azure/cosmos-db/local-emulator指向旧版本。

关于azure - 使用 DocumentDB(客户端库)在本地测试 Azure Functions,并针对 1.13.2 到 1.17.0 接收 'Invalid API version',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45871576/

相关文章:

azure - 如何创建azure函数来访问多个azure blob存储帐户?

azure - 无法访问带有 scm 关键字的发布 URL,这导致 VS 部署失败

azure-cosmosdb - CosmosDB 图 : How to update a value of property of vertex having multiple values using gremlin?

c# - 如何以编程方式获取 Azure 资源组标记值

Azure 应用程序网关 WAF 阻止常见的 ASP.Net Core 请求

azure - Azure 管道中未创建任何项目

node.js - Azure Functions,缩略图尺寸大于原始图像

azure - Azure 数据工厂中的 DayOfWeek 动态函数

azure-cosmosdb - 用于通用查询子文档的 DocumentDb 存储库

stored-procedures - 来自 DocumentDB 存储过程的触发触发器