我正在尝试使用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&TECHNICIAN_KEY=MyKey&format=XML&INPUT_DATA=<?xml version='1.0'?>
<API>
<name>email@host.com</name>
</API>"/>
</BtsHttpUrlMapping>
这很好,但是我需要一种更动态的方法。我尝试使用变量映射,所以用一个变量替换了硬编码的电子邮件地址。
<BtsHttpUrlMapping>
<Operation Url="?OPERATION_NAME=read&TECHNICIAN_KEY=MyKey&format=XML&INPUT_DATA=<?xml version='1.0'?>
<API>
<name>{email}</name>
</API>"/>
</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不能为复合段时,查询字符串的每一部分都必须采用“名称=值”的形式。有关更多详细信息,请参见UriTemplate文档。
如果我尝试不在转义的XML字符串之内的变量(如键),那么它将正常工作。
<BtsHttpUrlMapping>
<Operation Url="?OPERATION_NAME=read&TECHNICIAN_KEY={key}&format=XML&INPUT_DATA=<?xml version='1.0'?>
<API>
<value>email@host.com</value>
</API>"/>
</BtsHttpUrlMapping>
我的意图是能够在转义的XML字符串中使用变量。如果不可能的话;我将不得不使用动态适配器,并在业务流程中创建URI和URL映射。
答案 0 :(得分:0)
您是否理解为什么说查询字符串的每个部分都必须采用'name = value 的形式?只有几种方法可以使UriTemplates工作。
查看UriTemplate的工作原理here。这是一个有效的示例:
因此,在您的情况下,应将 INPUT_DATA = 之后的所有内容设为变量。这意味着您正在讨论的整个转义XML字符串。