当前位置: 首页 > 知识库问答 >
问题:

业务中心元数据文件使用Visual Studio OData Connection Service生成incorret APi路由

章晋鹏
2023-03-14

我有一个Dynamics Business Central的演示租户,我正在与OData合作,为公司实体制作CRUD示例,然后它为发票、报价、订单、产品和其他工作。我已经使用以下URL调用下载了元数据文件:https://api.businesscentral.dynamics.com/v2.0/{tenantid}/production/odatav4/$Metadata

使用IConfidentialClientApplication和AuthenticationResult提供访问令牌。令牌是正确的,我可以从商业中心获得公司名单时,使用它在邮递员。

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调用的代码:

列表 customQuotes=(await((dataservicequery )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$Metadata#)获取元数据文件后,查询将生成正确的url,但是我仍然会得到这样的错误,即我使用了不正确的凭据,但是当我在postman中使用url和访问令牌时,它会返回200个成功并使用正确的公司值。

共有1个答案

田柏
2023-03-14

获取AuthenticationResult的AcquireTokenOnBehalfOf方法不会在Business Central中返回带有访问令牌的单词'Bearer',当您为CRM客户服务获取令牌时,会返回单词'Bearer',所以我认为不会有问题。

 类似资料:
  • 如您所见,我获得了整个party搜索的链接,但没有获得单个party对象的链接。(我想我的问题类似于这个问题:如何在子资源中添加HATEOAS链接),但我不太确定,所以我发布了我自己的。 任何帮助都将不胜感激!谢谢!

  • 问题内容: 每次我的应用程序崩溃时,都不会生成核心转储文件。我记得几天前,它 是 在另一台服务器 上 生成的。我正在使用bash屏幕运行应用程序,如下所示: 如您所见,如果要生成核心转储,则在使用哪个选项很重要,但是当遇到分段错误时,它仍然不会生成。我该如何运作? 问题答案: 确保当前目录(崩溃时可能会更改目录)是可写的。如果服务器调用,则该目录必须是该用户可写的。 同时检查。这可能会将核心转储重

  • 我下载并反编译了minecraft插件的jar文件,并通过创建一个新的java项目Import将其添加到eclipse中 这导致了: 之后,我更改了一行代码,然后尝试导出它。 我不知道我该怎么做来解决这个问题。请帮忙。

  • 问题内容: 我试图将XML数据从网页转换为PDF文件,希望能完全在JavaScript中完成。我需要能够绘制文本,图像和简单形状。我希望能够完全在浏览器中做到这一点。 问题答案: 示例创建一个“ Hello World” PDF文件。

  • 是否可以直接访问Dynamics 365 business central的SQL server数据库,或者只能通过API访问它?