【问题标题】:Azure Data Factory - how can I trim double quotes and convert to a string?Azure 数据工厂 - 如何修剪双引号并转换为字符串?
【发布时间】:2021-05-04 16:45:57
【问题描述】:

我在 ADF 中有一个通往 REST API 端点的管道,该端点返回一个用双引号 (") 括起来的字符串。它看起来像这样:"xyz123fj==" 我想要做的是将字符串值存储在变量名为AuthKey。最初我只是“按原样”存储它,但管道失败并出现以下错误:The variable 'AuthKey' of type 'String' cannot be initialized or updated with value of type 'Object'. The variable 'AuthKey' only supports values of types 'String'.

所以很自然地我想我会尝试转换为这样的字符串:string(@activity('Get Token').output) 这实际上允许成功存储变量,但下一步失败并显示消息:Error calling the endpoint 'https://<xxxxxx.com/APIendpoint>'. Response status code: ''. More details:Exception message: 'The format of value 'string(@activity('Get Token').output)' is invalid.'. No response from the endpoint. Possible causes: network connectivity, DNS failure, server certificate validation or timeout.

我怀疑这意味着它实际上并没有存储原始的'xyz123fj==' 字符串,而是将未计算的函数本身存储为字符串(因此它存储了string(@activity('Get Token').output),这在发送到 API 时是无效的。

我还尝试了@string(activity('Get Token').output),导致错误消息略有不同:More details:Exception message: 'The format of value '{"Response":"\"xyz123fj==\"","ADFWebActivityResponseHeaders":{"Pragma":"no-cache","Strict-Transport-Security":"max-age=31536000","X-Absorb-Correlation-Id":"c937fab2-3e6c-4d92-8b28-5375fb2d5721","X-Content-Type-Options":"nosniff","X-Frame-Options":"SAMEORIGIN","X-LMS-Server":"USE1-PRD-WEB-A3","X-Response-For":"/api/Rest/v1/Authenticate","X-XSS-Protection":"1; mode=block","Connection":"keep-alive","Cache-Control":"no-cache","Date":"Mon, 03 May 2021 15:53:01 GMT","Content-Length":"178","Content-Type":"application/json; charset=utf-8","Expires":"-1"},"effectiveIntegrationRuntime":"DefaultIntegrationRuntime (East US)","executionDuration":0,"durationInQueue":{"integrationRuntimeQueue":0},"billingReference":{"activityType":"ExternalActivity","billableDuration":[{"meterType":"AzureIR","duration":0.016666666666666666,"unit":"Hours"}]}}' is invalid.'. No response from the endpoint.

在最后一个示例中,使用变量的步骤似乎从“设置变量”活动接收完整的输出对象,而不是预期的简单字符串。任何关于我在这里做错了什么的见解将不胜感激。

我也尝试只修剪单引号(所以没有字符串转换功能),但也无法让它工作。我要做的就是自己存储这个字符串:(

【问题讨论】:

    标签: azure-data-factory-2


    【解决方案1】:

    您应该使用@replace(activity('Get Token').output.Response,'"','') 表达式,反斜杠是ADF 中的转义字符。

    【讨论】:

    • 从技术上讲,这是对我提出的问题的正确答案......尽管我仍然遇到相关问题。但是,鉴于这解决了发布的问题,我将关闭它并为第 2 部分提交一个新问题。:\
    【解决方案2】:

    你应该可以在你的变量赋值中写@activity('Get Token').output.Response

    您的 Response 值似乎用双引号括起来,因此您可能不得不这样做来去掉引号:@replace(activity('Get Token').output.Response,'\"','')

    activity('Get Token').output 是类型对象 - 这就是发生第一个错误的原因(您不能将其分配给字符串变量)。

    在第二种情况下,您的表达式必须以 @ 开头才能被解释为这样。

    在最后一种情况下,您将 REST 活动(您可以在监视器中看到)的整个输出作为令牌发送,该令牌具有端点不期望的格式。

    【讨论】:

    • 你是对的,它是双引号,但无论如何,替换功能似乎不起作用......你的两个函数都返回:异常消息:'值的格式' "xyz123abc=="' 无效。'。端点没有响应。因为双引号仍然显示在错误消息中,我认为这是问题所在,但它们并没有被替换....
    • 更新:我删除了替换函数中的反斜杠,它去掉了双引号,但是,我仍然收到错误消息。这次它只是说异常消息:'值'xyz123/sijiwabc=='的格式无效。'。端点没有响应。 - 所以现在我认为这是AuthKey中的等号或反斜杠
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 2021-07-20
    相关资源
    最近更新 更多