业务中心元数据文件使用 Visual Studio OData 连接服务生成不正确的 APi 路由

Business Central Metadata File generates incorret APi Routes with Visual Studio OData Connection Service

我有一个 Dynamics Business Central 的演示租户,我正在使用 OData 为公司实体制作 CRUD 示例,然后它适用于发票、报价单、订单、产品等。我已经使用此 URL 调用下载了元数据文件:https://api.businesscentral.dynamics.com/v2.0/{tenantid}/Production/ODataV4/$metadata

访问令牌是使用 IConfidentialClientApplication 和 AuthenticationResult 提供的。令牌是正确的,在邮递员中使用它时,我可以从 Business Central 获取公司列表。

我在每个 odata 调用中传递令牌,如下所示:

myNAV.NAV bcContext = new myNAV.NAV(new Uri("https://api.businesscentral.dynamics.com/v1.0/api/beta/"));
bcContext.SendingRequest2 += new EventHandler<SendingRequest2EventArgs>((sender, e) => oDataExtension.OnSendingRequest(sender, e, crmAuthResult.AccessToken));
public class oDataExtension
    {

        public const string POSTLocationHeaderException = "The response to this POST request did not contain a 'location' header. That is not supported by this client.";

        public static void OnSendingRequest(object sender, SendingRequest2EventArgs e, string token)
        {
            // Add an Authorization header that contains an OAuth WRAP access token to the request.
            e.RequestMessage.SetHeader("Authorization", token);
            //if (e.RequestMessage.Method.Equals("PUT", System.StringComparison.InvariantCultureIgnoreCase))
            //{
            //    //e.RequestMessage.Method = "PATCH";

            //}
            if (!e.RequestMessage.Method.Equals("POST", System.StringComparison.InvariantCultureIgnoreCase) && !e.RequestMessage.Method.Equals("PATCH", System.StringComparison.InvariantCultureIgnoreCase))
            {
                e.RequestMessage.SetHeader("Prefer", "odata.include-annotations=\"*\"");
            }

            e.RequestMessage.SetHeader("accept-language", "en-US,en;q=0.9,hr;q=0.8");
        }
    }

这是我的 GET 公司 OData 调用的代码:

List<myNAV.Company> customQuotes = (await ((DataServiceQuery<myNAV.Company>)bcContext.Company).ExecuteAsync()).ToList();

代码生成的URL是这样的:https://api.businesscentral.dynamics.com/v1.0/api/beta/company

但正确的 URL 应该是这样的:https://api.businesscentral.dynamics.com/v1.0/api/beta/companies

Postman returns Error 404 with this url: https://api.businesscentral.dynamics.com/v1.0/api/beta/company,但 DataServiceQuery 中的相同调用 return Error 401 the credentials are incorrect.

从不同的 url(https://api.businesscentral.dynamics.com/v1.0/api/beta$metadata#) 获取元数据文件后,查询生成了正确的 url 但我仍然收到错误消息,我使用了不正确的凭据但是当我在邮递员中使用 URL 和访问令牌时 return 200 Success with correct company values.

用于获取 AuthenticationResult 的 AcquireTokenOnBehalfOf 方法不会 return 带有 Business Central 中访问令牌的单词 'Bearer',单词 'Bearer' 是 returned 时为 CRM 客户服务获取令牌,所以我认为那里不会有问题。