如何将 SOLMAN 与我的 Rest API 集成?

How to integrate SOLMAN with my Rest API?

我正在处理一个项目,该项目需要将 SAP Solution Manager (SOLMAN) 与 Azure Devops Rest 集成 API。

功能:

  1. 每当在 SOLMAN 中创建工作包时,我都想获取生成的 JSON 并在 Azure Devops 中创建一个功能。
  2. 在 Azure Devops 中创建功能后,我想 return 将功能的 ID 作为 EXTERNAL_ID 返回给 SOLMAN。

我创建了一个 API 并将其部署到 PCF。当我到达 api 端点时,工作项在 Azure devops 中创建。

但是当我创建一个 RFC 提供有关目标主机和 url 的详细信息时,我收到这样的错误(在 SAP thingy、ABAP 调试器或其他东西中):

从客户端 (:) 检测到潜在危险的 Request.Path 值。","typeName":"System.Web.HttpException

在 PCF 日志中,我可以看到这个错误(在 PCF 日志中):

Microsoft.AspNetCore.HttpsPolicy.HttpsRedirectionMiddleware 无法确定重定向的 https 端口。

看来我做错了什么。我的休息 API 没有身份验证机制 - 我认为这可能是缺失的 link。或者可能我必须为 HTTPS 使用特定端口。我被困在这里了。

哪位大侠可以帮帮我或者分享一下这方面的经验?

我终于成功地将 SAP Solution Manager 与 Azure Devops 集成在一起。由于我已经得到了解决方案并且集成工作正常,所以我正在写这个答案。

当我回头看我现在回答的问题时,我似乎没有正确解释我的场景,我问了一个技术问题。我会在这个答案的后半部分正确解释我试图做的事情,但对于那个特定的问题:

A potentially dangerous Request.Path value was detected from the client (:).","typeName":"System.Web.HttpException

问题:我试图在调用 SOLMAN [=82= 时从我的 .NET CORE 3.1 Web API 调用 SOLMAN External API ] 我遇到了上述错误。

原因 : SOLMAN API 需要任何外部工具或服务(api) :

  • 进行基本身份验证
  • 通过 HTTPS 而不是 HTTP 进行通信

解法:

这个问题的解决方案分为两部分-

1.在请求的身份验证 header 中添加用户名和密码。

理想情况下,您的 API 会有某种身份验证方案。如果没有,那么您将需要一个。您必须使用用户名和密码在 header 中添加授权字段。这样,您就不会收到任何身份验证错误,如 401 或 403。

2。检查您的 API 是否通过 HTTPS 通信。

我在 .NET Core 3.1 中编写了 API,在 .NET Core 中我们可以使用 HTTPSRedirection 中间件来确保 API 通过 HTTPS 进行通信。如果有任何 HTTP 请求到来,它会重定向到 HTTPS。这样您就可以进行 HTTPS 通信。

在我的例子中,我将我的 API 部署到云服务器,它已经默认提供 HTTPS,我还在我的 API 中添加了 HTTPSRedirection 中间件。但是我开始收到错误消息:

A potentially dangerous Request.Path value was detected from the client (:).","typeName":"System.Web.HttpException

所以我删除了中间件,它开始工作了。

现在,我已经解决了这个问题,我可以详细解释一下我想做的事情。我想将在 SAP Solution Manager 中创建的工作项/工作包与 Azure Devops backlog/board 同步。以下是要求:

  • 只要在 SAP Solution Manager 中创建工作包,就必须在 Azure Devops 中创建功能。
  • 只要在 SAP Solution Manager 中创建工作项,就必须在 Azure Devops 中创建用户故事。
  • 只要在 SAP Solution Manager 中更新工作项/工作包,就必须更新相应的功能/用户故事。
  • 只要任何 Feature/User 故事在 Azure Devops 中的状态发生变化,就必须在 SAP Solution Manager 中相应的工作项/工作包中更新该状态。

为了这个需求,我创建了一个 Web API,它在这两个工具(Azure Devops 和 Sap Solution Manager)中间工作,并在这两个工具之间建立连接。 API 执行以下任务:

  • 使用 RFC 从 Sap Solution Manager 接收 JSON 有效载荷,并将该响应转换为 Azure Devops 所需的适当响应。
  • 在 Azure Devops 中创建/更新/删除工作项
  • 接受从 Azure Devops 收到的 JSON 响应并将其转换为 Sap Solution Manager 所需的适当响应。

因此,这个 API 充当这两个工具的连接器。 @Jeff 对这个问题的评论之一也指出了商业现成产品,如果你有的话,它可能是解决这个问题的一个很好的选择。但我不知道它是如何工作的,因为我不可能为此购买新软件。