我最终设法将 SAP 解决方案管理器与 Azure Devops 集成。由于我已经得到了解决方案并且集成正在工作,我正在写这个答案。
当我回顾我现在正在回答的问题时,似乎我没有正确解释我的场景并且我问了一个技术问题。我将在这个答案的后面部分正确解释我试图做什么,但是对于那个特定的问题:
从客户端 (:) 检测到潜在危险的 Request.Path 值。","typeName":"System.Web.HttpException
问题:我试图从我的 .NET CORE 3.1 Web API 调用 SOLMAN External API,在调用 SOLMAN api 时出现上述错误。
原因:SOLMAN API 期望任何外部工具或服务(api):
- 进行基本身份验证
- 通过 HTTPS 而不是 HTTP 进行通信
解决方案:
这个问题的解决方案有两个部分——
1. 在请求的身份验证标头中添加用户名和密码。
理想情况下,您将为您的 API 提供某种身份验证方案。如果没有,那么您将需要一个。您必须在标题中添加授权字段以及用户名和密码。这样,您将不会收到任何身份验证错误,例如 401 或 403。
2. 检查您的 API 是否通过 HTTPS 进行通信。
我在 .NET Core 3.1 中编写了我的 API,在 .NET Core 中,我们可以使用 HTTPSRedirection 中间件来确保 API 通过 HTTPS 进行通信。如果有任何 HTTP 请求,它会重定向到 HTTPS。这样您就可以进行 HTTPS 通信。
在我的例子中,我将我的 API 部署到云服务器,默认情况下它已经提供了 HTTPS,我还在我的 API 中添加了 HTTPSRedirection 中间件。但我开始收到错误:
从客户端 (:) 检测到潜在危险的 Request.Path 值。","typeName":"System.Web.HttpException
所以我删除了中间件,它开始工作了。
现在,我已经解决了这个问题,我可以解释更多关于我试图做的事情。我想将 SAP 解决方案管理器中创建的工作项/工作包与 Azure Devops backlog/board 同步。以下是要求:
- 每当在 SAP 解决方案管理器中创建工作包时,都必须在 Azure Devops 中创建功能。
- 每当在 SAP 解决方案管理器中创建工作项时,都必须在 Azure Devops 中创建用户故事。
- 每当在 SAP 解决方案管理器中更新工作项/工作包时,必须更新相应的功能/用户故事。
- 每当 Azure Devops 中任何功能/用户故事的状态发生更改时,必须在 SAP 解决方案管理器的相应工作项/工作包中更新该状态。
为此,我创建了一个在这两个工具(Azure Devops 和 Sap 解决方案管理器)中间工作的 Web API,并在这两个工具之间建立连接。此 API 执行以下任务:
- 使用 RFC 获取从 Sap 解决方案管理器接收的 JSON 有效负载,并将该响应转换为 Azure Devops 所需的适当响应。
- 在 Azure Devops 中创建/更新/删除工作项
- 获取从 Azure Devops 收到的 JSON 响应,并将其转换为 Sap 解决方案管理器所需的适当响应。
因此,此 API 充当这两个工具的连接器。@Jeff 对这个问题的评论之一也指出了商业现成产品,如果你有它,这可能是解决这个问题的一个很好的选择。但我不知道它是如何工作的,因为对我来说为此购买新软件是不可能的。