AssignMessage 政策

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

結果

AssignMessage 政策會在 API Proxy 流程期間變更或建立新的要求和回應訊息。 你可以透過這項政策,對這類郵件執行下列動作:

  • 在郵件中新增新的表單參數、標頭或查詢參數
  • 將現有屬性從某封郵件複製到其他訊息
  • 移除標頭、查詢參數、表單參數和/或訊息 從訊息中的酬載
  • 設定訊息中現有屬性的值

使用 AssignMessage 政策時,通常會新增、變更或移除 要求或回應不過,您也可以使用 AssignMessage 政策建立自訂訊息 再將其傳送至替代目標,方法如 建立自訂要求訊息

AssignMessage 政策可以使用下列子項建立或變更流程變數 元素:

<AssignMessage> 個元素

定義 AssignMessage 政策。

預設值 請參閱下方的預設政策分頁
是否必填? 必填
類型 複雜物件
父項元素 不適用
子元素 <Add>
<AssignTo>
<AssignVariable>
<Copy>
<DisplayName>
<IgnoreUnresolvedVariables>
<Remove>
<Set>

<AssignMessage> 元素使用下列語法:

語法

<AssignMessage> 元素使用下列語法:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <!-- All AssignMessage child elements are optional -->
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>

  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>

  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
    <Value>variable_value</Value>
  </AssignVariable>

  <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>[false|true]</Path>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>[false|true]</ReasonPhrase>
    <StatusCode>[false|true]</StatusCode>
    <Verb>[false|true]</Verb>
    <Version>[false|true]</Version>
  </Copy>

  <DisplayName>policy_display_name</DisplayName>

  <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>

  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>

  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>path</Path>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>

</AssignMessage>

預設政策

以下範例顯示新增 AssignMessage 政策時的預設設定 加入 Edge UI 中的流程:

<AssignMessage continueOnError="false" enabled="true" name="assign-message-default">
  <DisplayName>Assign Message-1</DisplayName>
  <Properties/>
  <Copy source="request">
    <Headers/>
    <QueryParams/>
    <FormParams/>
    <Payload/>
    <Verb/>
    <StatusCode/>
    <ReasonPhrase/>
    <Path/>
  </Copy>
  <Remove>
    <Headers>
      <Header name="h1"/>
    </Headers>
    <QueryParams>
      <QueryParam name="q1"/>
    </QueryParams>
    <FormParams>
      <FormParam name="f1"/>
    </FormParams>
    <Payload/>
  </Remove>
  <Add>
    <Headers/>
    <QueryParams/>
    <FormParams/>
  </Add>
  <Set>
    <Headers/>
    <QueryParams/>
    <FormParams/>
    <!-- <Verb>GET</Verb> -->
    <Path/>
  </Set>
  <AssignVariable>
    <Name>name</Name>
    <Value/>
    <Ref/>
  </AssignVariable>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

當您在 Edge UI 中插入新的 AssignMessage 政策時,範本會包含所有使用者的虛設常式 以及可能有哪些作業一般而言,您會選取要使用此政策執行的作業 並移除其餘的子項元素舉例來說,如果您要執行複製作業,請使用 <Copy> 元素,然後從中移除 <Add><Remove> 和其他子元素 以便閱讀。

此元素在所有政策中皆包含下列屬性:

屬性 預設 必填與否 Description
name 必要

政策的內部名稱。name 屬性的值可以包含英文字母、數字、空格、連字號、底線和半形句號。這個值不得超過 255 個字元。

或者,您也可以使用 <DisplayName> 元素,在管理 UI Proxy 編輯器中,以不同的自然語言名稱來標示政策。

continueOnError false 選填 如果設為「false」,當政策失敗時會傳回錯誤。多數政策預期的行為如下。如果設為「true」,則在政策失敗後,仍會繼續執行流程。
enabled true 選填 設為「true」即可強制執行政策。將政策設為「false」,即可「關閉」政策。即使政策已附加至流程,系統也不會強制執行這項政策。
async   false 已淘汰 這項屬性已淘汰。

下表概略說明 <AssignMessage>:

子元素 必填與否 說明
常見作業
<Add> 選用 將資訊「至」<AssignTo> 元素。

<Add> 會為郵件新增原本不存在的郵件標頭或參數 撰寫新的電子郵件訊息如要覆寫現有的標頭或參數,請使用 <Set> 元素。

<Copy> 選用 從「source指定的訊息複製資訊 屬性<AssignTo> 元素指定的訊息物件。
<Remove> 選用 <AssignTo> 元素。
<Set> 選用 替換要求或回應中現有屬性值,該屬性值是由 <AssignTo> 元素。

<Set> 會覆寫原始檔案「已存在」的標頭或參數 撰寫新的電子郵件訊息如要新增標頭或參數,請使用 <Add> 元素。

其他子元素
<AssignTo> 選用 指定要對哪些訊息執行 AssignMessage 政策。您可以使用 可以是新的自訂訊息
<AssignVariable> 選用 為流程變數指派值。如果變數不存在 <AssignVariable> 即可建立該項目。
<IgnoreUnresolvedVariables> 選用 判斷遇到未解析的變數時,處理程序是否停止。

下文各節將逐一說明這些子元素。

範例

下列範例說明一些使用「AssignMessage」政策的方式 政策:

1:新增標頭

以下範例會將標頭新增至 <Add> 元素:

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

2:移除酬載

以下範例使用 <Remove> 從回應中刪除酬載 元素:

<AssignMessage continueOnError="false" enabled="true" name="remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

3:修改回覆

以下範例會在現有的回應物件中加入標頭,以修改該物件:

<AssignMessage name="modify-response">
  <Set>
    <Headers>
      <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" type="response"></AssignTo>
</AssignMessage>

這個範例不會建立新訊息。而是會修改 加入 HTTP 標頭。

本範例省略 <AssignTo> 元素中的變數名稱,並指定 type 做為「回應」,這項政策會修改目標傳回的回應物件 伺服器

這項政策在回應訊息中新增的 HTTP 標頭衍生自變數 由 LookupCache 政策填入。因此,這個程式碼修改的回應訊息 指派訊息政策包含一個 HTTP 標頭,指出結果是否已 是否從快取中提取資料在回應中設定標頭有助於偵錯及 來排解問題

4:設定動態內容

您可以使用「指派訊息」,在回應酬載中嵌入動態內容; 也就是要求訊息

如要在 XML 酬載中嵌入邊緣流程變數,請以遞迴方式包裝指定變數 大括號,如下所示:{prefix.name}

以下範例會嵌入 user-agent HTTP 標頭流量變數的值 在名為 User-agent 的 XML 元素中:

<AssignMessage name="set-dynamic-content">
  <AssignTo createNew="false" type="response"></AssignTo>
  <Set>
    <Payload contentType="text/xml">
      <User-agent>{request.header.user-agent}</User-agent>
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

如果是 JSON 酬載,您可以使用 variablePrefix 插入變數,並 variableSuffix 屬性含有分隔符號字元,如下所示 範例:

<AssignMessage name="set-payload">
  <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
  {
     "user-agent": "@request.header.user-agent#"
  }
  </Payload>
</AssignMessage>

如需流程變數的完整清單,請參閱流程變數參考資料

自雲端版本 16.08.17 起,您也可以使用大括號插入變數。

5:移除查詢參數

以下範例會從要求中移除 apikey 查詢參數:

<AssignMessage name="remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

最佳做法是從要求中移除 apikey 查詢參數 使用 VerifyAPIKey 政策驗證使用者。這麼做可避免 將機密資訊從後端目標傳遞至後端目標。

6:設定/取得變數

以下範例使用三種「指派郵件」政策:

  1. 在要求中建立三個流程變數,使用靜態值
  2. 可在要求流程的第二個政策中以動態方式取得流程變數
  3. 設定在回應的酬載中
<!-- Policy #1: Set variables in the request -->
<AssignMessage continueOnError="false" enabled="true" name="set-variables">
    <!-- Create a variable named myAppSecret -->
    <AssignVariable>
        <Name>myAppSecret</Name>
        <Value>42</Value>
    </AssignVariable>
    <!-- Create a variable named config.environment -->
    <AssignVariable>
        <Name>config.environment</Name>
        <Value>test</Value>
    </AssignVariable>
    <!-- Create a variable named config.protocol -->
    <AssignVariable>
        <Name>config.protocol</Name>
        <Value>gopher</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

在第一項政策中,<AssignVariable> 元素會建立並設定三個 變數。每個 <Name> 元素都會指定 變數名稱,而 <Value> 指定了值。

第二個政策使用 <AssignVariable> 元素讀取值,並建立三個 新變數:

<!-- Policy #2: Get variables from the request -->
<AssignMessage continueOnError="false" enabled="true" name="get-variables">
  <AssignTo createNew="false" transport="http" type="request"/>
  <!-- Get the value of myAppSecret and create a new variable, secret -->
  <AssignVariable>
    <Name>secret</Name>
    <Ref>myAppSecret</Ref>
    <Value>0</Value>
  </AssignVariable>
  <!-- Get the value of config.environment and create a new variable, environment -->
  <AssignVariable>
    <Name>environment</Name>
    <Ref>config.environment</Ref>
    <Value>default</Value>
  </AssignVariable>
  <!-- Get the value of config.protocol and create a new variable, protocol -->
  <AssignVariable>
    <Name>protocol</Name>
    <Ref>config.protocol</Ref>
    <Value>default</Value>
  </AssignVariable>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>

在第二個政策中,<Ref> 元素會參照來源變數。 和 <Name> 元素會指定新變數的名稱。如果變數 無法存取 <Ref> 元素所參照的值。您可以使用 由 <Value> 元素指定。

如要測試這組政策,請按照下列步驟操作:

  1. 在要求流程中新增政策 1 和 #2。請務必將政策 1 置於政策「之前」 #2.
  2. 回應流程中新增第三個政策。
  3. 第三個政策會使用 <Set> 元素將變數加入回應。 下列範例會在回應中建構 XML 酬載,讓 Edge 傳回用戶端:
    <!-- Policy #3: Add variables to the response -->
    <AssignMessage continueOnError="false" enabled="true" name="put-em-in-the-payload">
      <DisplayName>put-em-in-the-payload</DisplayName>
      <Set>
        <Payload contentType="application/xml">
          <wrapper>
            <secret>{secret}</secret>
            <config>
              <environment>{environment}</environment>
              <protocol>{protocol}</protocol>
            </config>
          </wrapper>
        </Payload>
      </Set>
      <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
      <AssignTo createNew="false" transport="http" type="response"/>
    </AssignMessage>
    

    請注意,在 <Set> 中存取流程變數的語法是包裝變數 大括號

    請務必將 <Payload> 元素的 contentType 屬性設為 「application/xml」。

  4. 傳送要求至 API Proxy。例如:
    curl -vL https://ahamilton-eval-test.apigee.net/myproxy

    您也可以選擇透過 xmllint 等公用程式串連結果,以便 XML 會以適當的格式顯示:

    curl -vL https://ahamilton-eval-test.apigee.net/myproxy | xmllint --format -

    回應主體應如下所示:

    <wrapper>
      <secret>42</secret>
      <config>
        <environment>test</environment>
        <protocol>gopher</protocol>
      </config>
    </wrapper>

7:取得服務呼叫回應標頭

在以下範例中,假設 API Proxy 要求包含 Service callout 政策, 而摘要回應包含多個同名的標頭 (Set-Cookie)。假設服務呼叫的回應變數為預設變數 calloutResponse,下列政策會取得第二個 Set-Cookie 標頭值。

<AssignMessage continueOnError="false" enabled="true" name="get-header">
  <Set>
    <Payload contentType="application/json">
      {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"}
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

如要列出「所有」標頭值,請改用下列變數:

{calloutResponse.header.Set-Cookie.values}

這個參考資料中的每個子元素都各有額外範例。如需更多範例,請參見 AssignMessage 範例

子元素參照

本節將說明 <AssignMessage> 的子元素。

<Add>

將資訊加入要求或回應中,由 <AssignTo> 指定 元素。

<Add> 元素會在訊息中新增屬性,但該訊息不存在於原始中 撰寫新的電子郵件訊息如要變更現有屬性的值,請使用 <Set> 元素。

預設值 不適用
是否必填? 選用
類型 複雜類型
父項元素 <AssignMessage>
子元素 <FormParams>
<Headers>
<QueryParams>

<Add> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>
</AssignMessage>

範例 1

以下範例使用 <FormParams> 元素取得 三個查詢字串參數,並將這些參數設為 目標端點要求:

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="name">{request.queryparam.name}</FormParam>
      <FormParam name="zip">{request.queryparam.zipCode}</FormParam>
      <FormParam name="lang">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"/>
</AssignMessage>

範例 2

以下範例使用 <Headers> 元素 目標端點要求的 User-Agent 標頭:

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

範例 3

以下範例使用 <QueryParams> 元素新增單一查詢 參數,並在要求中填入靜態值:

<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

這個範例在要求預先流程中使用 <Add>。如果您是在工具中查看結果 追蹤工具,也就是向「http://httpbin.org/get」發出的要求變成 &quot;http://httpbin.org/get?myParam=42&quot;.

<Add> 的子元素支援動態字串替代,也就是 訊息範本

<FormParams> (<Add> 的子項)

在要求訊息中加入新的表單參數。這個元素對回應沒有影響 撰寫新的電子郵件訊息

預設值 不適用
是否必填? 選用
類型 <FormParam> 元素陣列
父項元素 <Add>
子元素 <FormParam>

<FormParams> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
  </Add>
</AssignMessage>

範例 1

以下範例會將單一表單參數 (「answer」) 和靜態值 (「42」) 加入 要求:

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-1">
  <Add>
    <FormParams>
      <FormParam name="answer">42</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"></AssignTo>
</AssignMessage>

範例 2

以下範例會取得 name 查詢字串參數的值,並 即可將回應新增至請求做為表單參數:

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-2">
  <Add>
    <FormParam name="name">{request.queryparam.name}</FormParam>
  </Add>
</AssignMessage>

請注意,本範例不會指定使用 <AssignTo> 的目標。這項政策會將 參數。

範例 3

以下範例會在要求中加入多個表單參數:

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="name">{request.queryparam.name}</FormParam>
      <FormParam name="zip">{request.queryparam.zipCode}</FormParam>
      <FormParam name="lang">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"/>
</AssignMessage>

這個範例會從來源要求取得查詢字串參數,並將參數加到 做為形式參數,傳送至傳送至目標端點的要求。

您可以使用追蹤記錄工具查看流程。您會看到要求內容的主體 包含網址編碼表單資料,資料最初是以查詢字串傳遞 參數:

%7Busername%7D=nick&%7Bzip_code%7D=90210&%7Bdefault_language%7D=en

您必須符合下列條件,才能使用 <FormParams>

  • HTTP 動詞:POST
  • 訊息類型:要求
  • 下列一個 (或兩者皆有):
    • 表單資料:設為某個值或「」(空字串)。舉例來說 curl,請在要求中加入 -d ""
    • Content-Length 標頭:設為 0 (如果目的地中沒有資料, 原始要求;如果沒有,則目前長度,以位元組為單位)。舉例來說 「curl」會在你的要求中加入 -H "Content-Length: 0"

例如:

curl -vL -X POST -d "" -H "Content-Type: application/x-www-form-urlencoded"
  https://ahamilton-eval-test.apigee.net/am-test

新增 <FormParams> 時,Edge 會將要求的 Content-Type 標頭設為 &quot;application/x-www-form-urlencoded&quot;然後再傳送訊息至目標服務。

<Headers> (<Add> 的子項)

新增標頭至指定的要求或回應,而該要求是由 <AssignTo> 元素。

預設值 不適用
是否必填? 選用
類型 <Header> 元素陣列
父項元素 <Add>
子元素 <Header>

<Headers> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Add>
</AssignMessage>

範例 1

以下範例會在要求訊息中加入 user-agent 標頭,並且 將 request.user.agent 資料流變數的值指派給該標頭。

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

<QueryParams> (<Add> 的子項)

在請求中加入新的查詢參數。這個元素不會對回應產生任何影響。

預設值 不適用
是否必填? 選用
類型 <QueryParam> 元素陣列
父項元素 <Add>
子元素 <QueryParam>

<QueryParams> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>
</AssignMessage>

範例 1

以下範例會加入查詢參數「myParam」並指定其值 「42」加入:

<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

您必須符合下列條件,才能使用 <QueryParams>

  • HTTP 動詞:GET
  • 訊息類型:要求

此外,您只能設定 <AssignTo> 元素的 type 屬性是要求訊息。如果在回覆上設定這些參數,就不會有任何作用。

如果您在政策中定義了空白的查詢參數陣列 (<Add><QueryParams/></Add>),這項政策不會新增任何查詢 參數。這與省略 <QueryParams> 相同。

<AssignTo>

決定 AssignMessage 政策針對哪個物件進行操作。可採用的選項包括:

  • 要求訊息:API Proxy 接收的 request
  • 回應訊息:目標伺服器傳回的 response
  • 自訂訊息:自訂要求或回應物件

請注意,在某些情況下,您無法變更 AssignMessage 政策執行的物件。 舉例來說,您無法使用 <Add><Set> 新增或變更查詢參數 (<QueryParams>) 或表單參數 (<FormParams>)。只有在 操控請求的查詢參數和 form 參數。

預設值 不適用
是否必填? 選用
類型 字串
父項元素 <AssignMessage>
子元素

如果未指定 <AssignTo>,政策會對預設的要求或回應執行。 以政策執行位置為準如果政策在要求流程中執行, 則會影響要求訊息。如果在回應流程中執行,政策會影響回應 根據預設。

<AssignTo> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>

範例 1

以下範例會指定,目標就是會傳送至 目標端點:

<AssignMessage name="assignto-1">
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

createNew 設為「false」,此範例不會 這項政策中的所有作業都會影響原始要求。

範例 2

以下範例會建立新的要求物件:

<AssignMessage name="assignto-2">
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

建立新的要求或回應物件時,AssignMessage 政策的其他元素 政策 (例如 <Add><Set><Set>) 都會根據新政策 物件物件。

您可以在流程中稍後在其他政策中存取新的要求物件,或傳送新的要求物件 使用服務呼叫政策,向外部服務要求物件。

範例 3

以下範例建立名為「MyRequestObject」的新要求物件:

<AssignMessage name="assignto-2">
  <AssignTo createNew="true" transport="http" type="request"&gt;MyRequestObject&lt;/AssignTo>
</AssignMessage>

建立新的要求或回應物件時,AssignMessage 政策的其他元素 政策 (例如 <Add><Set><Set>) 都會根據新政策 物件物件。

您可以在流程中稍後在其他政策中存取新的要求物件,或傳送新的要求物件 使用服務呼叫政策,向外部服務要求物件。

下表說明 <AssignTo> 的屬性:

屬性 說明 必填與否 類型
createNew

決定這項政策在指派值時是否要建立新訊息。

如果值為「true」,則政策會建立一個類型的新變數 type (「要求」或「回應」) 所指定的值。如果發生以下情況: 未指定新變數的名稱,則政策會建立新的要求,或 回應物件,依據 type 的值。

如果值為「false」,則政策會以下列兩種方式之一回應:

  • 如果 <AssignTo> 可以將變數名稱解析為要求或回應,則 會繼續處理例如,如果政策位於要求流程中,則變數就是 物件物件。如果政策在回應中,則變數為 回應物件。
  • 如果 <AssignTo> 無法解析,或是解析為非訊息類型, 政策會擲回錯誤。

如未指定 createNew,政策會以下列兩種方式回應:

  • 如果 <AssignTo> 解析為訊息,處理會前往下一次 採用
  • 如果 <AssignTo> 無法解析,或是無法解析為非訊息類型, 就會建立這個 type 指定類型的變數。
選用 布林值
transport

指定要求或回應訊息類型的傳輸類型。

預設值為「http」。(唯一支援的值)。

選用 字串
type 指定新訊息的類型 (當 createNew 為「true」時)。有效 值為「request」或「response」

預設值為「request」。如果您省略這個屬性,則 Edge 會建立 要求或回應,視這項政策執行的流程中的哪個位置而定。

選用 字串

<AssignVariable>

為目的地流程變數指派值 (例如, assignMessage 政策)。如果流程變數不存在,<AssignVariable> 會建立 基礎架構

預設值 不適用
是否必填? 選用
類型 複雜類型
父項元素 <AssignMessage>
子元素 <Name> (必填)
<Ref>
<Template>
<Value>

您指派給目的地流程變數的值可以是下列其中一種:

  • 常值字串:使用 <Value> 子項元素指定常值 字串值。
  • 流程變數:使用 <Ref> 子元素來指定 目的地流程變數的現有流程變數。完整的流程清單 可做為來源的變數,請參閱流程變數參考資料
  • 訊息範本:使用 <Template> 子元素指定 「訊息範本」 目的地流程變數。

<AssignVariable> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
    <Value>variable_value</Value>
  </AssignVariable>
</AssignMessage>

使用 <Ref> 元素指定來源變數。如果 無法存取 <Ref> 所參照的變數,Edge 會使用這個值 <Value> 元素所指定的屬性。如果您要定義 <Template>,其優先順序高於其他子元素。

範例 1

以下範例將新變數 myvar 的值設為常值 值「42」:

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

範例 2

以下範例會指派流程變數的值 將 request.header.user-agent 傳送至目的地流程變數 myvar 查詢參數 country 的值和目的地流程變數 Country:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

如果其中一項指派失敗,Edge 會改為指派「ErrorOnCopy」值到 目的地流程變數

如果 myvarCountry 流程變數不存在, <AssignVariable> 會建立這些物件。

範例 3

以下範例使用 <Template> 子項元素,用於串連兩個結構定義變數 ,中間是連字號字串 (連字號):

<AssignMessage name='template-1'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

<AssignVariable> 的常見用途是為查詢參數、標頭或 與要求一併傳遞的其他值。方法是結合使用 <Ref><Value> 子元素。如要 資訊,請參閱 <Ref> 的範例。

<Name> (<AssignVariable> 的子項)

指定目的地流程變數的名稱 (例如,將變數值設定為 指派訊息政策)。如果 <AssignVariable> 中指定的變數不存在, 政策會以該名稱建立資源

預設值 不適用
是否必填? 必填
類型 字串
父項元素 <AssignVariable>
子元素

<Name> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
  </AssignVariable>
</AssignMessage>

範例 1

以下範例將目的地變數指定為 myvar,並設為該變數 轉換為常值「42」:

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

如果 myvar 不存在,<AssignVariable> 會加以建立。

<Ref> (<AssignVariable> 的子項)

以流程變數的形式指定指派來源。流程變數可以是 預先定義的流程變數 (如流程變數參考資料中列出的項目) 或自訂流程變數 每個專案的名稱

一律會將 <Ref> 的值解讀為資料流變數。你無法 會將常值字串指定為 值。如要指派常值字串值,請使用 <Value> 元素 。

預設值 不適用
是否必填? 選用
類型 字串
父項元素 <AssignVariable>
子元素

當您使用 <Ref> 指定資料流變數時,請省略 方括號「{}」您慣用的流程來參照流程變數例如: 將新變數的值設為 client.host 資料流的值 變數:

Do this (no brackets):
  <Ref>client.host</Ref>

Do NOT do this (brackets):
  <Ref>{client.host}</Ref>

如要定義目的地流程變數的預設值,請使用 <Value> 結合 <Ref>如果 Pod 所指定的流量變數 <Ref> 不存在、無法讀取,或為空值,則 Edge 會指派該值 傳送至目的地流程變數的 <Value>

<Ref> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
  </AssignVariable>
</AssignMessage>

範例 1

以下範例會指派流程變數的值 將 request.header.user-agent 傳送至目的地流程變數 myvar, 將查詢參數 country 的值設為 Country 變數:

<AssignMessage name="assignvariable-4">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
  </AssignVariable>
</AssignMessage>

在這個範例中,Edge 並未為下列項目指定預設值 (或備用值) 作業。

範例 2

以下範例會指派流程變數 request.header.user-agent 的值 目的地流程變數 myvar 和值 ,country 加入 Country 變數:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

在本例中,如果 request.header.user-agent 流程變數的值 或 Country 查詢參數為空值、無法讀取或格式錯誤,Edge 指派 值「ErrorOnCopy」對應至新的變數

範例 3

<AssignVariable> 的常見用途是設定查詢的預設值 參數、標頭或其他可隨要求傳遞的值。舉例來說 天氣 API Proxy,該要求會使用名為「w」的單一查詢參數。這個 參數包含要查詢天氣的城市 ID。要求網址 表單:

http://myCO.com/v1/weather/forecastrss?w=city_ID

如要定義「w」的預設值,請建立 AssignMessage 政策,例如 包括:

<AssignMessage continueOnError="false" enabled="true" name="assignvariable-3">
  <AssignTo createNew="false" transport="http" type="request"/>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>request.queryparam.w</Name>
    <Ref>request.queryparam.w</Ref>
    <Value>12797282</Value>
  </AssignVariable>
</AssignMessage>

在這個範例中,<AssignVariable> 會取得 request.queryparam.w 的值。 並指派給自己如果流量變數為空值,表示「w」查詢參數之前為 未加入的內容,本例會使用 <Value> 元素。因此,您可以向這個 API 提出要求 Proxy 中省略「w」的查詢參數:

http://myCO.com/v1/weather/forecastrss

...而且 API Proxy 會傳回有效的結果。

與使用 <Value> 時不同,<Ref> 的值必須是 流程變數,例如 requestresponse 的屬性或 target 物件。此值也可以是您建立的自訂流程變數。

如果您為 <Ref> 的值指定不存在的資料流變數, <IgnoreUnresolvedVariables> 的值為「true」,Edge 會擲回錯誤。

<Template> (<AssignVariable> 的子項)

指定 訊息範本。訊息 範本可讓您在執行政策時執行變數字串替換。 可以將常值字串與以大樣式包裝的變數名稱結合 大括號除此之外 支援 函式,例如逸出和大小寫轉換。

使用 ref 屬性指定流程變數,這個變數的值 是一個訊息範本例如,您可以將訊息範本儲存為 自訂屬性 是開發人員的應用程式Edge 在驗證 API 金鑰後識別開發人員應用程式 或安全性權杖 (透過額外政策)、<AssignVariable> 元素可以使用應用程式自訂屬性中的訊息範本, 視為流程變數。以下範例假設訊息 這個範本位於名為 message_template 的客戶屬性中 發出 API 呼叫的開發人員應用程式,其中 VerifyAPIKey 政策用於驗證 應用程式的 API 金鑰:

<AssignVariable ref='verifyapikey.myVerifyAPIKeyPolicy.app.name.message_template'/>

預設值 不適用
是否必填? 選用
類型 字串
父項元素 <AssignVariable>
子元素

<Template> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
  </AssignVariable>
</AssignMessage>

範例 1

下例使用訊息範本語法來串連兩個結構定義變數 ,中間是連字號字串 (連字號):

<AssignMessage name='template-1'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

範例 2

以下範例會指定流程變數,其中變數的值 是預先定義的訊息範本如果您想要在 插入預先定義的範本,請使用此選項 而且不必修改政策:

<AssignMessage name='template-2'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template ref='my_template_variable'/>

  </AssignVariable>
</AssignMessage>

範例 3

以下範例會指定流程變數和文字值。在這個範例中 參照的變數不是空值,所以系統會使用該值做為範本。如果參照的 值為空值,接著文字值 (在本例中為 {system.uuid}-{messageid}) 就會當做範本這個模式有助於提供「覆寫」值,其中 在某些情況下,您想用值覆寫預設範本 (文字部分) 動態設定例如,條件陳述式可能會擷取值 然後將參照的變數設為該值:

<AssignMessage name='template-2'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template ref='my_variable'>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

<Value> (<AssignVariable> 的子項)

定義使用 <AssignVariable> 設定的目的地流程變數值。 值一律會被解譯為常值字串;您不能使用流程變數做為值 以方括號包住值 (「{}」)。如要使用資料流變數,請使用 <Ref>

預設值 不適用
是否必填? 選用
類型 字串
父項元素 <AssignVariable>
子元素

<Ref> 元素搭配使用時,<Value> 做為預設 (或備用) 值。如未指定 <Ref>, 無法解析或為空值,則會使用 <Value> 的值。

<Value> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Value>variable_value</Value>
  </AssignVariable>
</AssignMessage>

範例 1

以下範例會設定目的地流程變數 myvar 的值。 轉換為常值「42」:

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

範例 2

以下範例會指派流程變數的值 將 request.header.user-agent 傳送至資料流變數 myvar 和值 ,country 加入 Country 變數:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

如果其中一項指派失敗,<AssignVariable> 會改為指派「ErrorOnCopy」值到 目的地流程變數

<Copy>

從「來自」source 屬性指定的訊息複製值 「傳送至」,這是 <AssignTo> 元素指定的訊息。如未指定 含有 <AssignTo> 的目標,這項政策會將值複製到要求或回應, 視這項政策執行流程中的位置而定。

預設值 不適用
是否必填? 選用
類型 字串
父項元素 <AssignMessage>
子元素 <FormParams>
<Headers>
<Path>
<Payload>
<QueryParams>
<ReasonPhrase>
<StatusCode>
<Verb>
<Version>

<Copy> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
    <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>[false|true]</Path>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>[false|true]</ReasonPhrase>
    <StatusCode>[false|true]</StatusCode>
    <Verb>[false|true]</Verb>
    <Version>[false|true]</Version>
  </Copy>
  <!-- Used as the destination for the <Copy> values -->
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>
  

範例 1

以下範例會複製標頭、三個表單參數、路徑和所有查詢 參數請求新的自訂要求:

<AssignMessage continueOnError="false" enabled="true" name="copy-1">
  <Copy source="request">
    <Headers>
      <Header name="Header_Name_1">Header value 1</Header>
    </Headers>
    <FormParams>
      <FormParam name="Form_Param_Name_1">Form param value 1</FormParam>
      <FormParam name="Form_Param_Name_2">Form param value 1</FormParam>
      <FormParam name="Form_Param_Name_3">Form param value 1</FormParam>
    </FormParams>
    <Payload>false</Payload>
    <Path>true</Path>
    <QueryParams/>
    <ReasonPhrase>false</ReasonPhrase>
    <StatusCode>false</StatusCode>
    <Verb>false</Verb>
    <Version>false</Version>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

<Copy> 元素的屬性如下:

屬性 說明 必填與否 類型
來源

指定副本的來源物件。

  • 如未指定 source,則會視為簡易訊息。適用對象 舉例來說,如果政策在要求流程中,則來源預設為 request 物件。如果政策在回應流程中,則預設為 response 物件。如果省略 source,您可以使用絕對值 流程變數的參照做為複本的來源。例如,指定 使用 {request.header.user-agent}
  • 如果無法解析來源變數,或是無法解析為非訊息類型, <Copy> 沒有回應。
選用 字串

<FormParams> (<Copy> 的子項)

從 將 <Copy> 元素的 source 屬性「傳送到」要求 是由 <AssignTo> 元素所指定。這個元素不會影響 回應。

預設值 不適用
是否必填? 選用
類型 <FormParam> 元素陣列或空白陣列
父項元素 <Copy>
子元素 <FormParam>

<FormParams> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Copy>
</AssignMessage>

範例 1

以下範例會將要求中的單一表單參數複製到 自訂要求「MyCustomRequest」:

<AssignMessage name="copy-formparams-1">
  <Copy source="request">
    <FormParams>
      <FormParam name="paramName">Form param value 1</FormParam>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

範例 2

以下範例會將所有表單參數複製到自訂要求 &quot;MyCustomRequest&quot;:

<AssignMessage name="copy-formparams-2">
  <Copy source="request">
    <FormParams/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

範例 3

以下範例會將三個表單參數複製到自訂要求 &quot;MyCustomRequest&quot;:

<AssignMessage name="copy-formparams-3">
  <Copy source="request">
    <FormParams>
      <FormParam name="paramName1"/>
      <FormParam name="paramName2"/>
      <FormParam name="paramName3"/>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

示例 4

如果有多個表單參數的名稱相同,請使用以下語法:

<AssignMessage name="copy-formparams-4">
  <Copy source="request">
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

此範例複製了「f1」、「f2」和第二個值「f3」。如果為「f3」只有一個 值,系統就不會複製這個值。

您必須符合下列條件,才能使用 <FormParams>

  • HTTP 動詞:POST
  • 訊息類型:回覆
  • 下列一個 (或兩者皆有):
    • 表單資料:設為某個值或「」(空字串)。舉例來說 curl,請在要求中加入 -d ""
    • Content-Length 標頭:設為 0 (如果目的地中沒有資料, 原始要求;否則目前長度舉例來說 「curl」會在你的要求中加入 -H "Content-Length: 0"

複製 <FormParams> 時,<Copy> 會將訊息的 Content-Type 設為 &quot;application/x-www-form-urlencoded&quot;然後再傳送訊息至目標服務。

<Headers> (<Copy> 的子項)

從「從」要求或回應訊息指定的要求或回應訊息中複製 HTTP 標頭 將 <Copy> 元素的 source 屬性「傳送至」要求 <AssignTo> 元素所指定的或回應訊息。

預設值 不適用
是否必填? 選用
類型 <Header> 元素陣列或空白陣列
父項元素 <Copy>
子元素 <Header>

<Headers> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Copy>
</AssignMessage>

範例 1

以下範例會將要求中的 user-agent 標頭複製到 新的自訂要求物件:

<AssignMessage name="copy-headers-1">
  <Copy source="request">
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

範例 2

如要複製所有標頭,請使用空白的 <Headers> 元素,如以下範例所示 顯示:

<AssignMessage name="copy-headers-2">
  <Copy source="request">
    <Headers/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

範例 3

如果有多個相同名稱的標頭,請使用以下語法:

<AssignMessage name="copy-headers-3">
  <Copy source="request">
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

此範例複製「h1」、「h2」和第二個值「h3」。如果輸入「h3」只有一個 值,系統就不會複製這個值。

<Path> (<Copy> 的子項)

決定是否應從來源要求複製到目的地的路徑 請求。這個元素不會對回應產生任何影響。

如果值為「true」,這項政策會從<Copy> 元素的 source 屬性「傳送至」要求 訊息是由 <AssignTo> 元素指定。

預設值
是否必填? 選用
類型 布林值
父項元素 <Copy>
子元素

<Path> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Path>[false|true]</Path>
  </Copy>
</AssignMessage>

範例 1

以下範例表示 AssignMessage 政策應從來源複製路徑 要求新的自訂要求物件:

<AssignMessage name="copy-path-1">
  <Copy source="request">
    <Path>true</Path>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

您必須符合下列條件,才能使用 <Path>

  • 訊息類型:要求

<Payload> (<Copy> 的子項)

決定是否應將酬載從來源複製到目的地。 來源和目的地可以是要求或回應。

如果值為「true」,這項政策會從 <Copy> 元素的 source 屬性訊息 是由 <AssignTo> 元素所指定。

預設值
是否必填? 選用
類型 布林值
父項元素 <Copy>
子元素

<Payload> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Payload>[false|true]</Payload>
  </Copy>
</AssignMessage>

範例 1

以下範例將 <Payload> 設為「true」這樣要求酬載 從要求複製到回應:

<AssignMessage name="copy-payload-1">
  <Copy source="request">
    <Payload>true</Payload>
  </Copy>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

<QueryParams> (<Copy> 的子項)

將「從」指定的要求複製查詢字串參數, <Copy> 元素的 source 屬性「傳送至」指定的要求 <AssignTo> 元素。這個元素不會對回應產生任何影響。

預設值 不適用
是否必填? 選用
類型 <QueryParam> 元素陣列或空白陣列
父項元素 <QueryParam>
子元素

<QueryParams> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Copy>
</AssignMessage>

範例 1

以下範例複製「my_param」改為新的 自訂要求物件:

<AssignMessage name="copy-queryparams-1">
  <Copy source="request">
    <QueryParams>
      <QueryParam name="my_param"/>
    </QueryParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

範例 2

以下範例會將請求中的所有查詢參數複製到新的自訂項目 要求物件:

<AssignMessage name="copy-queryparams-2">
  <Copy source="request">
    <QueryParams/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

範例 3

如果有多個名稱相同的查詢參數,請使用以下語法:

<AssignMessage name="copy-queryparams-3">
  <Copy source="request">
    <QueryParams>
      <QueryParam name="qp1"/>
      <QueryParam name="qp2"/>
      <QueryParam name="qp3.2"/>
    </QueryParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

此範例複製「qp1」、「qp2」和「qp3」的第二個值。如果「qp3」只有 這個值就不會複製

您必須符合下列條件,才能使用 <QueryParams>

  • HTTP 動詞:GET
  • 訊息類型:要求

<ReasonPhrase> (<Copy> 的子項)

決定是否應從來源回應複製原因詞組到 目的地回應這個元素對要求沒有任何影響。

如果為「true」,這項政策就會「從」回應複製 ReasonPhrase 是由 <Copy> 元素的 source 屬性指定「對應至」回應 是由 <AssignTo> 元素指定。

預設值
是否必填? 選用
類型 布林值
父項元素 <Copy>
子元素

<ReasonPhrase> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <ReasonPhrase>[false|true]</ReasonPhrase>
  </Copy>
</AssignMessage>

範例 1

以下範例將 <ReasonPhrase> 設為「true」,導致 <Copy> 將原因詞組從預設回應複製到自訂回應物件:

<AssignMessage name="copy-reasonphrase-1">
  <Copy source="response">
    <ReasonPhrase>true</ReasonPhrase>
  </Copy>
  <AssignTo createNew="trie" transport="http" type="response">MyCustomResponse</AssignTo>
</AssignMessage>

您必須符合下列條件,才能使用 <ReasonPhrase>

  • 訊息類型:回覆

<StatusCode> (<Copy> 的子項)

決定是否將狀態碼從來源回應複製到目的地 回應。這個元素對要求沒有任何影響。

如果為「true」,這項政策會「從」指定的回應訊息指定的回應訊息中複製狀態碼 將 <Copy> 元素的 source 屬性「傳送至」回應 訊息是由 <AssignTo> 元素指定。

預設值
是否必填? 選用
類型 布林值
父項元素 <Copy>
子元素

<StatusCode> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <StatusCode>[false|true]</StatusCode>
  </Copy>
</AssignMessage>

範例 1

以下範例會將 <StatusCode> 設為「true」,用來複製狀態碼 從預設回應物件變更為新的自訂回應物件:

<AssignMessage name="copy-statuscode-1">
  <Copy source="response">
    <StatusCode>true</StatusCode>
  </Copy>
  <AssignTo createNew="true" transport="http" type="response">MyCustomResponse</AssignTo>
</AssignMessage>

您必須符合下列條件,才能使用 <StatusCode>

  • 訊息類型:回覆

<StatusCode> 的常見用途,是確保 Proxy 回應的狀態相同 因為 <AssignTo>createNew 時從目標接收的回應中 屬性設為「true」。

<Verb> (<Copy> 的子項)

判斷 HTTP 動詞是否從來源要求複製到目的地 請求。這個元素不會對回應產生任何影響。

如果為「true」,則複製 <Copy> 元素 source 屬性中的動詞 加到 <AssignTo> 元素中指定的要求。

預設值
是否必填? 選用
類型 布林值
父項元素 <Copy>
子元素

<Verb> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Verb>[false|true]</Verb>
  </Copy>
</AssignMessage>

範例 1

下列範例將 <Verb> 設為「true」,後者會從 改為新的自訂要求:

<AssignMessage name="copy-verb-1">
  <Copy source="request">
    <Verb>true</Verb>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

您必須符合下列條件,才能使用 <Verb>

  • 訊息類型:要求

<Version> (<Copy> 的子項)

決定是否將 HTTP 版本從來源要求複製到 目的地要求。這個元素不會對回應產生任何影響。

如果設為「true」,系統會複製 <Copy> 元素的 source 屬性中找到的 HTTP 版本 設為 <AssignTo> 元素指定的物件。

預設值
是否必填? 選用
類型 布林值
父項元素 <Copy>
子元素

<Version> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Version>[false|true]</Version>
  </Copy>
</AssignMessage>

範例 1

以下範例將 <Version> 設為「true」並複製 版本從預設要求物件變更為新的自訂要求物件:

<AssignMessage name="copy-version-1">
  <Copy source="request">
    <Version>true</Version>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

您必須符合下列條件,才能使用 <Version>

  • 訊息類型:要求

<DisplayName>

name 屬性外,一併使用 管理 UI Proxy 編輯器,使用不同的自然名稱。

<DisplayName> 元素適用於所有政策。

預設值 不適用
是否必填? 選用設定。如果您省略 <DisplayName>, 使用政策的 name 屬性
類型 字串
父項元素 &lt;PolicyElement&gt;
子元素

<DisplayName> 元素使用下列語法:

語法

<PolicyElement>
  <DisplayName>policy_display_name</DisplayName>
  ...
</PolicyElement>

範例

<PolicyElement>
  <DisplayName>My Validation Policy</DisplayName>
</PolicyElement>

<DisplayName> 元素不含任何屬性或子元素。

<IgnoreUnresolvedVariables>

判斷遇到未解析的變數時,處理程序是否停止。

預設值
是否必填? 選用
類型 布林值
父項元素 <AssignMessage>
子元素

設為 true 即可忽略未解析的變數並繼續處理;否則 false。預設值為 false

將「<IgnoreUnresolvedVariables>」設為 true 的做法與設定 「<AssignMessage>continueOnErrortrue,因為這是專屬於 及取得變數值將 continueOnError 設為 true,則 Edge 會忽略所有錯誤,而不只是使用 變數。

<IgnoreUnresolvedVariables> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>
</AssignMessage>

範例 1

以下範例會將 <IgnoreUnresolvedVariables> 設為「true」:

<AssignMessage name="ignoreunresolvedvariables">
  <Copy source="response">
    ...
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  </Copy>
</AssignMessage>

<Remove>

移除標頭、查詢參數、表單參數和/或郵件酬載, 一則訊息訊息可以是要求或回應。你指定哪則訊息「<Remove><AssignTo> 元素的處理方法。

預設值 不適用
是否必填? 選用
類型 複雜類型
父項元素 <AssignMessage>
子元素 <FormParams>
<Headers>
<Payload>
<QueryParams>

<Remove> 的常見用途是刪除含有敏感內容的查詢參數 來自傳入要求物件的資訊,以避免傳遞至後端伺服器。

<Remove> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Payload>[false|true]</Payload>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>
</AssignMessage>

範例 1

以下範例會從回應中移除訊息內文:

<AssignMessage continueOnError="false" enabled="true" name="remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

在回應流程中,這項政策會移除回應主體,只傳回 HTTP 標頭傳送給用戶端

範例 2

以下範例會從傳入的資料中移除所有表單參數和查詢參數 要求:

<AssignMessage continueOnError="false" enabled="true" name="remove-2">
  <Remove>
    <!-- Empty (<FormParams/>) removes all form parameters -->
    <FormParams/>
    <QueryParams>
      <QueryParam name="qp1"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

<FormParams> (<Remove> 的子項)

從要求中移除指定表單參數。這個元素不會影響 回應。

預設值 不適用
是否必填? 選用
類型 <FormParam> 元素陣列或空白陣列
父項元素 <Remove>
子元素 <FormParam>

<FormParams> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Remove>
</AssignMessage>

範例 1

以下範例會從要求中移除三個表單參數:

<AssignMessage name="remove-formparams-1">
  <Remove>
    <FormParams>
      <FormParam name="form_param_1"/>
      <FormParam name="form_param_2"/>
      <FormParam name="form_param_3"/>
    </FormParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

範例 2

以下範例會從要求中移除所有表單參數:

<AssignMessage name="remove-formparams-2">
  <Remove>
    <FormParams/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

範例 3

如果有多個表單參數的名稱相同,請使用以下語法:

<AssignMessage name="remove-formparams-3">
  <Remove>
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

此範例會移除「f1」、「f2」和第二個值「f3」。如果為「f3」只有一個 值,系統就不會移除。

您必須符合下列條件,才能使用 <FormParams>

  • 訊息類型:要求
  • Content-Type:「application/x-www-form-urlencoded」

<Headers> (<Remove> 的子項)

從要求或回應中移除指定的 HTTP 標頭 (由 <AssignTo> 元素。

預設值 不適用
是否必填? 選用
類型 <Header> 元素陣列或空白陣列
父項元素 <Remove>
子元素 <Header>

<Headers> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Remove>
</AssignMessage>

範例 1

以下範例會從要求中移除 user-agent 標頭:

<AssignMessage name="remove-headers-1">
  <Remove>
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

範例 2

以下範例會從要求中移除所有標頭:

<AssignMessage name="remove-headers-2">
  <Remove>
    <Headers/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

範例 3

如果有多個相同名稱的標頭,請使用以下語法:

<AssignMessage name="remove-headers-3">
  <Remove>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

此範例會移除「h1」、「h2」和第二個值「h3」。如果輸入「h3」 只有一個值,系統不會移除該值。

<Payload> (<Remove> 的子項)

決定 <Remove> 是否要刪除要求或回應中的酬載, <AssignTo> 元素所指定的屬性。設為「true」到 清除酬載;否則為「false」。預設值是「false」。

預設值
是否必填? 選用
類型 布林值
父項元素 <Remove>
子元素

<Payload> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <Payload>[false|true]</Payload>
  </Remove>
</AssignMessage>

範例 1

以下範例將 <Payload> 設為「true」這樣要求酬載 已清除:

<AssignMessage name="remove-payload-1">
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

<QueryParams> (<Remove> 的子項)

從要求中移除指定的查詢參數。這個元素不會影響 回應。

預設值 不適用
是否必填? 選用
類型 <QueryParam> 元素陣列或空白陣列
父項元素 <Remove>
子元素 <QueryParam>

<QueryParams> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>
</AssignMessage>

範例 1

以下範例會從要求中移除單一查詢參數:

<AssignMessage name="remove-queryparams-1">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
      </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

範例 2

以下範例會從要求中移除所有查詢參數:

<AssignMessage name="remove-queryparams-2">
  <Remove>
      <QueryParams/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

範例 3

如果有多個名稱相同的查詢參數,請使用以下語法:

<AssignMessage name="remove-queryparams-3">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
        <QueryParam name="qp2"/>
        <QueryParam name="qp3.2"/>
      </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

此範例會移除「qp1」、「qp2」和第二個值「qp3」。如果 「qp3」只有一個值,系統不會移除該值。

示例 4

以下範例會從要求中移除 apikey 查詢參數:

<AssignMessage name="remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

您必須符合下列條件,才能使用 <QueryParams>

  • HTTP 動詞:GET
  • 訊息類型:要求

<Set>

設定要求或回應訊息中的資訊,由 <AssignTo> 元素。<Set> 會覆寫標頭或 。如要建立新的標頭或參數,請使用 <Add> 元素。

預設值 不適用
是否必填? 選用
類型 複雜類型
父項元素 <AssignMessage>
子元素 <FormParams>
<Headers>
<Payload>
<Path>
<QueryParams>
<ReasonPhrase>
<StatusCode>
<Verb>
<Version>

<Set> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
    <Path>path</Path>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>
</AssignMessage>

範例 1

以下是 <Set> 元素的範例:

<AssignMessage continueOnError="false" enabled="true" name="set-1">
  <Set>
    <FormParams>
      <FormParam name="myparam">{request.header.myparam}</FormParam>
    </FormParams>
    <Headers>
        <Header name="user-agent">{request.header.user-agent}</Header>
    </Headers>
    <QueryParams>
      <QueryParam name="name">{request.header.name}</QueryParam>
      <QueryParam name="address">{request.header.address}</QueryParam>
    </QueryParams>
    <!-- <Verb>GET</Verb> -->
    <Payload contentType="text/plain">42</Payload>
    <Path/>
    <ReasonPhrase>Bad request</ReasonPhrase>
    <StatusCode>400</StatusCode>
    <Verb>POST</Verb>
    <Verb>{my_variable}</Verb>
    <Version>1.1</Version>
  </Set>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

<FormParams> (<Set> 的子項)

覆寫要求中的現有表單參數,並以您產生的新值取代這些參數 您會透過這個元素 進行指定這個元素不會對回應產生任何影響。

預設值 不適用
是否必填? 選用
類型 <FormParam> 元素陣列
父項元素 <Set>
子元素 <FormParam>

<FormParams> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Set>
</AssignMessage>

範例 1

以下範例會設定名為「myparam」的表單參數設為 新自訂要求中的 request.header.myparam 變數:

<AssignMessage name="set-formparams-1">
  <Set>
    <FormParams>
      <FormParam name="myparam">{request.header.myparam}</FormParam>
    </FormParams>
  </Set>
    <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

您必須符合下列條件,才能使用 <FormParams>

  • HTTP 動詞:POST
  • 訊息類型:要求

如果您在政策中定義了空白的表單參數 (<Add><FormParams/></Add>),這項政策不會新增任何表單 參數。這與省略 <FormParams> 相同。

<Set> 會將訊息的 Content-Type 變更為 &quot;application/x-www-form-urlencoded&quot;然後再傳送至目標端點

<Headers> (<Set> 的子項)

覆寫要求或回應中的現有 HTTP 標頭 (由 <AssignTo> 元素。

預設值 不適用
是否必填? 選用
類型 <Header> 元素陣列
父項元素 <Set>
子元素 <Header>

<Headers> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Set>
</AssignMessage>

範例 1

下列範例會將 user-agent 標頭設為 request.header.user-agent 變數:

<AssignMessage name="set-headers-1">
  <Set>
    <Headers>
      <Header name="user-agent">{request.header.user-agent}</Header>
    </Headers>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

如果您在政策中定義了空白標頭 (<Add><Headers/></Add>),政策不會新增任何標頭。這個 等同於省略 <Headers>

<Path> (<Set> 的子項)

<Payload> (<Set> 的子項)

定義要求或回應的訊息內文;由 <AssignTo> 元素。酬載可以是任何有效的內容類型,例如純文字 文字、JSON 或 XML

預設值 空字串
是否必填? 選用
類型 字串
父項元素 <Set>
子元素

<Payload> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
  </Set>
</AssignMessage>

範例 1

下列範例會設定純文字酬載:

<AssignMessage name="set-payload-1">
  <Set>
    <Payload contentType="text/plain">42</Payload>
  </Set>
</AssignMessage>

範例 2

下列範例會設定 JSON 酬載:

<AssignMessage name="set-payload-2">
  <Set>
    <Payload contentType="application/json">
      {"name":"foo", "type":"bar"}
    </Payload>
  </Set>
</AssignMessage>

範例 3

以下範例會包裝變數名稱,將變數值插入酬載 大括號:

<AssignMessage name="set-payload-3">
  <Set>
    <Payload contentType="application/json">
      {"name":"foo", "type":"{variable_name}"}
    </Payload>
  </Set>
</AssignMessage>

在較舊版本的 Apigee Edge 中 (例如雲端版本 16.08.17 之前), 不要使用大括號來表示 JSON 酬載中的變數參照。在這些版本中 需要使用 variablePrefixvariableSuffix 屬性 並指定分隔符號字元,並使用這些字元來納入變數名稱,如下所示:

<AssignMessage name="set-payload-3b">
  <Set>
    <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
      {"name":"foo", "type":"@variable_name#"}
    </Payload>
  </Set>
</AssignMessage>

這個舊版語法仍然有效。

示例 4

系統會將 <Payload> 的內容視為訊息範本。也就是說, AssignMessage 政策會將大括號括住的變數替換為 在執行階段中參照的變數

以下範例使用大括號語法將部分酬載設為 變數值:

<AssignMessage name="set-payload-4">
  <Set>
    <Payload contentType="text/xml">
      <root>
        <e1>sunday</e1>
        <e2>funday</e2>
        <e3>{var1}</e3>
      </root>
    </Payload>
  </Set>
</AssignMessage>

下表說明 <Payload> 的屬性:

屬性 說明 存在必要性 類型
contentType

如果有指定,contentType 的值會指派給 Content-Type HTTP 標頭。

選用 字串
variablePrefix 視需要指定資料流變數中的前置分隔符號。預設為「{」。適用對象 詳情請參閱流程變數參考資料 選用 雜雜
variableSuffix 視需要指定資料流變數的結尾分隔符號。預設為 "}。適用對象 詳情請參閱流程變數參考資料 選用 雜雜

<QueryParams> (<Set> 的子項)

使用新值覆寫要求中現有的查詢參數。這個元素沒有效果 回應。

預設值 不適用
是否必填? 選用
類型 <QueryParam> 元素陣列
父項元素 <Set>
子元素 <QueryParam>

<QueryParams> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Set>
</AssignMessage>

範例 1

以下範例會設定「地址」參數改為 request.header.address 變數:

<AssignMessage continueOnError="false" enabled="true" name="set-queryparams-1">
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.header.address}</QueryParam>
    </QueryParams>
  </Set>
</AssignMessage>

您必須符合下列條件,才能使用 <QueryParams>

  • HTTP 動詞:GET
  • 訊息類型:要求

如果您在政策中定義了空白的查詢參數 (<Set><QueryParams/></Set>),這項政策不會設定任何查詢 參數。這與省略 <QueryParams> 相同。

<ReasonPhrase> (<Set> 的子項)

設定回應中的原因詞組。這通常是在與 <StatusCode>。這個元素對要求沒有任何影響。

預設值 不適用
是否必填? 選用
類型 字串
父項元素 <Set>
子元素

<ReasonPhrase> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
  </Set>
</AssignMessage>

範例 1

下列範例定義簡單的原因語句:

<AssignMessage name="set-reasonphrase-1">
  <Set>
    <ReasonPhrase>Bad medicine</ReasonPhrase>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

範例 2

系統會將 <ReasonPhrase> 的內容視為訊息範本。也就是說 使用大括號括住的變數名稱會在執行階段替換成 參照的變數,如以下範例所示:

<AssignMessage name="set-reasonphrase-2">
  <Set>
    <ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

您必須符合下列條件,才能使用 <ReasonPhrase>

  • 訊息類型:回覆

<StatusCode> (<Set> 的子項)

設定回應的狀態碼。這個元素對要求沒有任何影響。

預設值 「200」(當 <AssignTo>createNew 屬性時 設為「true」)
是否必填? 選用
類型 字串或 variable
父項元素 <Set>
子元素

<StatusCode> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
  </Set>
</AssignMessage>

範例 1

以下範例會設定簡單的狀態碼:

<AssignMessage name="set-statuscode-1">
  <Set>
    <StatusCode>404</StatusCode>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

範例 2

系統會將 <StatusCode> 的內容視為訊息範本。也就是說 使用大括號括住的變數名稱在執行階段中,會替換成 參照的變數,如以下範例所示:

<AssignMessage name="set-statuscode-2">
  <Set>
    <StatusCode>{calloutresponse.status.code}</StatusCode>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

您必須符合下列條件,才能使用 <StatusCode>

  • 訊息類型:回覆

<Verb> (<Set> 的子項)

設定要求的 HTTP 動詞。這個元素不會對回應產生任何影響。

預設值 不適用
是否必填? 選用
類型 字串或 variable
父項元素 <Set>
子元素

<Verb> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
  </Set>
</AssignMessage>

範例 1

下列範例會針對要求設定簡單的動詞:

<AssignMessage name="set-verb-1">
  <Set>
    <Verb>POST</Verb>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

範例 2

系統會將 <Verb> 的內容視為訊息範本。這代表變數名稱 系統在執行階段將以大括號包住的值取代為參照的值 變數。

以下範例使用變數填入動詞:

<AssignMessage name="set-verb-2">
  <Set>
    <Verb>{my_variable}</Verb>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

您必須符合下列條件,才能使用 <Verb>

  • 訊息類型:要求

<Version> (<Set> 的子項)

設定要求的 HTTP 版本。這個元素不會對回應產生任何影響。

預設值 不適用
是否必填? 選用
類型 字串或 variable
父項元素 <Set>
子元素

<Version> 元素使用下列語法:

語法

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>
</AssignMessage>

範例 1

以下範例會將版本號碼設定為「1.1」:

<AssignMessage name="set-version-1">
  <Set>
    <Version>1.1</Version>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

範例 2

下列指令會在大括號中使用變數設定版本號碼:

<AssignMessage name="set-version-2">
  <Set>
    <Version>{my_version}</Version>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

系統會將 <Version> 的內容視為訊息範本。也就是說 執行階段中以大括號包住的變數名稱,將替換成參照的值 變數。

您必須符合下列條件,才能使用 <Version>

  • 訊息類型:要求

以下範例會使用「Assign Message」(指派訊息) 建立自訂要求物件:

<AssignMessage name="AssignMessage-3">
  <AssignTo createNew="true" type="request">MyCustomRequest</AssignTo>
  <Copy>
    <Headers>
     <Header name="user-agent"/>
    </Headers>
  </Copy>
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.queryparam.addy}</QueryParam>
    </QueryParams>
    <Verb>GET</Verb>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

這個範例:

  • 建立名為「MyCustomRequest」的新要求訊息物件。
  • 在 MyCustomRequest 上,這項政策:
    • 從傳入流量複製 user-agent HTTP 標頭的值 要求接收新訊息。因為 <Copy> 使用 user-agent 流程變數,沒有 您必須將 source 屬性指定為 <Copy>
    • 將自訂訊息的 address 查詢參數設為 傳入要求的 addy 查詢參數
    • 將 HTTP 動詞設為 GET
  • <IgnoreUnresolvedVariables> 設為「false」。時間:<IgnoreUnresolvedVariables> 為「false」,如果政策嘗試新增的其中一個變數不存在,Edge 會停止 在 API 流程中處理的資料