-1

我想在我的业务中心扩展中创建一个 PostRequest,它在我的 Web 服务中对我进行身份验证并返回一个令牌。我将请求正文中的用户名和密码发送到我的 Web 服务,并在正文中收到 JSON 格式的令牌。我想使用 HttpClient 创建发布请求。

我使用以下链接作为模板:https ://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/methods-auto/httpcontent/httpcontent-data-type

    procedure sendPostRequest(uri: Text) 
        var
        client: HttpClient;
        content: HttpContent;
        contentHeaders: HttpHeaders;
        response: HttpResponseMessage;
        request: HttpRequestMessage;

    begin
        content.GetHeaders(contentHeaders);
        contentHeaders.Clear();
        contentHeaders.Add('Content-Type', 'application/json');

        request.Content:= content;

        request.SetRequestUri(uri);
        request.Method := 'POST';
    end;
    procedure SetURLsToDefault(var MessagingServiceSetup: Record "Messaging Service Setup WMR")
    begin
       MessagingServiceSetup."Service URL" := '202.212.127:8800';
    end;

我有几个问题:

1) 我的 API 网关的基本 url 是 202.212.127:8800。为了能够验证自己,我必须访问 202.212.127:8800/authenticate。有没有可以创建网址的方法?

2)如何在内容中获取我的用户名和密码?

3) 我如何获得令牌,我可以将其保存在现场吗?

有人可以告诉我如何启动并运行 PostRequest 吗?

4

2 回答 2

0
  1. 基本上一个字符串可以作为一个 url。取决于你想要什么。为您的 Web 服务调用进行设置是一种很好的做法,因此我支持 Babak。您可以设置一个表格来存储链接、凭据 - 无论如何。

    1. 4) 我建议使用 Waldos Rest App 进行网络服务调用。你可以在这里下载源代码:https ://github.com/waldo1001/waldo.restapp

它封装了调用,还具有用于 json 处理的辅助函数。使用"REST Helper"代码单元。您可以将呼叫分解为:

local procedure DoCallWebservice(URI: Text; User: Text; Pass: Text; var Token: Text);
var
    RESTHelper: Codeunit "REST Helper WLD";
begin
    RRESTHelper.Initialize('GET', URI);
    RESTHelper.SetContentType('application/json');
    RESTHelper.AddBody('{"user":"USERNAME","pass":"PASSWORD"}');
    if RESTHelper.Send() then
      Token := RESTHelper.GetResponseContentAsText();
end;

显然,您需要根据需要解析响应(JSONHelper)。看看codeunit的代码,它或多或少是不言自明的。

于 2020-07-29T07:33:08.487 回答
0

创建不同 URL 的常用方法如下:

  • 创建设置表
  • 创建“Base Url”、User、Pass 等字段。

我为您的代码提出了这种模式:

SendRequest(Method; Url; Body)
Begin
...

几个功能(您的 Api 和 Auth):

Authenticate()
begin
 Method = 'post';
 Url = SetupTable."Base Url" + '/authenticate';
 Body = (Use AL Json stack and incorporate your user pass)
 SendRequest(Method; Url; Body);
end;

Function1()
begin
 Method = 'get';
 Url = SetupTable."Base Url" + '/apiPath-Function1';
 Body = '';
 SendRequest(Method; Url; Body);
end

Function2()
begin
 Method = 'post';
 Url = SetupTable."Base Url" + '/apiPath-Function2';
 Body = (Use AL Json stack and incorporate your body structure);
 SendRequest(Method; Url; Body);
end;

要让您的用户进入内容,您需要检查您尝试调用的 Api 的文档。它通常是详细描述的,它可以是一个简单的基本认证标头,也可以是一个复杂的 Jwt。

为了接收令牌,您需要先检查您的 Api 文档,但本质上是在进行 Rest 调用之后(例如:client.Send(RequestMessage, ResponseMessage); 在您的 SendRequest 方法中),您会收到回复,您可以使用 AL用于挖掘信息的 Json 堆栈。

这是一篇关于如何进行的好文章: https ://jackmallender.com/2019/03/04/interacting-with-rest-apis-using-json-from-within-business-central-part-1-an- httpclient-data-type 简介/

于 2020-06-21T12:27:21.717 回答