1

我正在尝试使用 BizTak WCF-WebHttp 适配器使用变量映射发送到 Service Desk Plus CMDB API。

尝试使用浏览器时,它工作正常。Service Desk Plus CMDB API 需要一个类似的 URI(为了便于阅读而严格缩短):

http://host.com/api/cmdb/ci?OPERATION_NAME=read&TECHNICIAN_KEY=Mykey&format=XML&INPUT_DATA=<?xml version='1.0'?>
<API>
    <name>email@host.com</name>
</API>

我使用了 URI http://host.com/api/cmdb/ci和 URL 映射。

<BtsHttpUrlMapping>
    <Operation Url="?OPERATION_NAME=read&amp;TECHNICIAN_KEY=MyKey&amp;format=XML&amp;INPUT_DATA=&lt;?xml version=&apos;1.0&apos;?&gt;
        &lt;API&gt;
            &lt;name&gt;email@host.com&lt;/name&gt;
        &lt;/API&gt;"/>  
</BtsHttpUrlMapping>

这很好用,但我需要一种更动态的方法。我尝试使用变量映射,所以我用变量替换了硬编码的电子邮件地址。

<BtsHttpUrlMapping>
    <Operation Url="?OPERATION_NAME=read&amp;TECHNICIAN_KEY=MyKey&amp;format=XML&amp;INPUT_DATA=&lt;?xml version=&apos;1.0&apos;?&gt;
        &lt;API&gt;
            &lt;name&gt;{email}&lt;/name&gt;
        &lt;/API&gt;"/>  
</BtsHttpUrlMapping>

尝试使用变量保存 URL 映射时出现错误。

WCF-WebHttp 传输属性

保存属性时出错。(System.InvalidOperationException) UriTemplate

?OPERATION_NAME=read&TECHNICIAN_KEY=MyKey&format=XML&INPUT_DATA=<?xml version='1.0'?><API><name>{email}</name></API>

无效;当 value 不能是复合段时,查询字符串的每个部分都必须采用“name=value”的形式。有关更多详细信息,请参阅 UriTemplate 的文档。

如果我尝试使用不在转义 XML 字符串中的变量,例如使用键,那么它可以正常工作。

<BtsHttpUrlMapping>
    <Operation Url="?OPERATION_NAME=read&amp;TECHNICIAN_KEY={key}&amp;format=XML&amp;INPUT_DATA=&lt;?xml version=&apos;1.0&apos;?&gt;
        &lt;API&gt;
            &lt;value&gt;email@host.com&lt;/value&gt;
        &lt;/API&gt;"/>  
</BtsHttpUrlMapping>

我的意图是能够在转义的 XML 字符串中使用变量。如果这是不可能的;我将不得不转向动态适配器并在编排中创建 URI 和 URL 映射。

4

1 回答 1

0

你明白为什么它说查询字符串的每个部分都必须是'name=value'的形式吗?只有几种方法可以使 UriTemplates 工作。

在这里查看 UriTemplate 的工作原理。这是一个有效的示例:

  • 天气/{state}/{city}?forecast={day}

因此,在您的情况下,您应该在INPUT_DATA=变量之后创建所有内容。这意味着您正在谈论的整个转义 XML 字符串。

于 2019-05-19T18:52:34.147 回答