Directivas de transformación de API Management

En este tema se proporciona una referencia para las siguientes directivas de API Management. Para obtener más información sobre cómo agregar y configurar directivas, consulte Directivas en Administración de API.

Directivas de transformación

Conversión de JSON a XML

La directiva json-to-xml convierte un cuerpo de solicitud o respuesta de JSON a XML.

Instrucción de la directiva

<json-to-xml apply="always | content-type-json" consider-accept-header="true | false" parse-date="true | false"/>

Ejemplo

<policies>
    <inbound>
        <base />
    </inbound>
    <outbound>
        <base />
        <json-to-xml apply="always" consider-accept-header="false" parse-date="false"/>
    </outbound>
</policies>

Elementos

Nombre Descripción Obligatorio
json-to-xml Elemento raíz.

Atributos

Nombre Descripción Obligatorio Valor predeterminado
apply El atributo debe establecerse en uno de los siguientes valores.

- always: indica que se debe aplicar la conversión siempre.
- content-type-json: especifica que solo se debe realizar la conversión si el encabezado Content-Type indica la presencia de JSON.
N/D
consider-accept-header El atributo debe establecerse en uno de los siguientes valores.

- true: especifica que se debe aplicar la conversión si se solicita XML en el encabezado de aceptación (Accept) de la solicitud.
- false: indica que se debe aplicar siempre la conversión.
No true
parse-date Cuando se establece en false, los valores de fecha simplemente se copian durante la transformación. No true

Uso

Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.

  • Secciones de la directiva: entrante, saliente y en caso de error

  • Ámbitos de la directiva: todos los ámbitos

Conversión de XML a JSON

La directiva xml-to-json convierte un cuerpo de solicitud o respuesta de XML a JSON. Esta directiva puede usarse para modernizar API basadas en servicios web de back-end de solo XML.

Instrucción de la directiva

<xml-to-json kind="javascript-friendly | direct" apply="always | content-type-xml" consider-accept-header="true | false"/>

Ejemplo

<policies>
    <inbound>
        <base />
    </inbound>
    <outbound>
        <base />
        <xml-to-json kind="direct" apply="always" consider-accept-header="false" />
    </outbound>
</policies>

Elementos

Nombre Descripción Obligatorio
xml-to-json Elemento raíz.

Atributos

Nombre Descripción Obligatorio Valor predeterminado
kind El atributo debe establecerse en uno de los siguientes valores.

- javascript-friendly: el código JSON convertido presenta un formato intuitivo para los desarrolladores de JavaScript.
- direct: el código JSON convertido refleja la estructura del documento XML original.
N/D
apply El atributo debe establecerse en uno de los siguientes valores.

- always: indica que se debe realizar la conversión siempre.
- content-type-XML: especifica que solo se debe realizar la conversión si el encabezado Content-Type indica la presencia de XML.
N/D
consider-accept-header El atributo debe establecerse en uno de los siguientes valores.

- true: especifica que se debe aplicar la conversión si se solicita JSON en el encabezado de aceptación (Accept) de la solicitud.
- false: indica que se debe aplicar siempre la conversión.
No true

Uso

Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.

  • Secciones de la directiva: entrante, saliente y en caso de error

  • Ámbitos de la directiva: todos los ámbitos

Buscar y reemplazar la cadena en el cuerpo

La política find-and-replace busca una subcadena de solicitud o de respuesta y la sustituye por otra distinta.

Instrucción de la directiva

<find-and-replace from="what to replace" to="replacement" />

Ejemplo

<find-and-replace from="notebook" to="laptop" />

Elementos

Nombre Descripción Obligatorio
find-and-replace Elemento raíz.

Atributos

Nombre Descripción Obligatorio Valor predeterminado
desde La cadena que se va a buscar. N/D
to La cadena de sustitución. Especifique una cadena de reemplazo de longitud cero para quitar la cadena de búsqueda. N/D

Uso

Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.

  • Secciones de la directiva: inbound, outbound, backend, on-error

  • Ámbitos de la directiva: todos los ámbitos

Enmascarar URL en el contenido

La directiva redirect-content-urls reescribe (enmascara) los vínculos del cuerpo de la respuesta para que apunten al vinculo equivalente a través de la puerta de enlace. Utilícela en la sección saliente a fin de rescribir los vínculos del cuerpo de la respuesta para hacer que apunten a la puerta de enlace. Úsela en la sección entrante para obtener el resultado opuesto.

Nota

Esta directiva no cambia los valores de los encabezados, como los Location. Para cambiar los valores del encabezado, use la directiva set-header.

Instrucción de la directiva

<redirect-content-urls />

Ejemplo

<redirect-content-urls />

Elementos

Nombre Descripción Obligatorio
redirect-content-urls Elemento raíz.

Uso

Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.

  • Secciones de la directiva: entrante y saliente

  • Ámbitos de la directiva: todos los ámbitos

Establecer el servicio back-end

Use la directiva set-backend-service a fin de redirigir una solicitud entrante a un back-end distinto al especificado en la configuración de la API para esa operación. Esta directiva cambia la dirección URL base del servicio back-end de la solicitud entrante a la especificada en la directiva.

Instrucción de la directiva

<set-backend-service base-url="base URL of the backend service" />

or

<set-backend-service backend-id="identifier of the backend entity specifying base URL of the backend service" />

Nota

Las entidades de back-end pueden administrarse mediante Azure Portal, la API de administración y PowerShell.

Ejemplo

<policies>
    <inbound>
        <choose>
            <when condition="@(context.Request.Url.Query.GetValueOrDefault("version") == "2013-05")">
                <set-backend-service base-url="http://contoso.com/api/8.2/" />
            </when>
            <when condition="@(context.Request.Url.Query.GetValueOrDefault("version") == "2014-03")">
                <set-backend-service base-url="http://contoso.com/api/9.1/" />
            </when>
        </choose>
        <base />
    </inbound>
    <outbound>
        <base />
    </outbound>
</policies>

En este ejemplo, la directiva del servicio back-end establecida enruta las solicitudes según el valor de versión pasado en la cadena de consulta a un servicio back-end distinto del especificado en la API.

Inicialmente, la dirección URL base del servicio back-end se obtiene a partir de la configuración de la API. Por ello, la dirección URL de solicitud https://contoso.azure-api.net/api/partners/15?version=2013-05&subscription-key=abcdef se convierte en http://contoso.com/api/10.4/partners/15?version=2013-05&subscription-key=abcdef, donde http://contoso.com/api/10.4/ se corresponde con la dirección URL del servicio back-end especificada en la configuración de la API.

Cuando se aplica la instrucción de la directiva <choose>, la dirección URL base del servicio back-end puede volver a cambiar a http://contoso.com/api/8.2 o http://contoso.com/api/9.1, en función del valor del parámetro de consulta de la solicitud de la versión. Por ejemplo, si el valor es "2013-15", la dirección URL final de la solicitud se convierte en http://contoso.com/api/8.2/partners/15?version=2013-05&subscription-key=abcdef.

Si se desea aplicar más transformaciones a la solicitud, es posible usar otras directivas de transformación. Por ejemplo, para quitar el parámetro de consulta de la versión ahora que la solicitud se está enrutando a un back-end específico de la versión, se puede usar la directiva de establecimiento del parámetro de cadena de consulta para quitar el atributo de versión, que ahora presenta un carácter redundante.

Ejemplo

<policies>
    <inbound>
        <set-backend-service backend-id="my-sf-service" sf-partition-key="@(context.Request.Url.Query.GetValueOrDefault("userId","")" sf-replica-type="primary" />
    </inbound>
    <outbound>
        <base />
    </outbound>
</policies>

En este ejemplo, la directiva enruta la solicitud a un back-end de Service Fabric, con la cadena de consulta userId como la clave de partición y con la réplica principal de la partición.

Elementos

Nombre Descripción Obligatorio
set-backend-service Elemento raíz.

Atributos

Nombre Descripción Obligatorio Valor predeterminado
base-url Nueva dirección URL base del servicio back-end. base-url o backend-id deben estar presentes. N/D
backend-id Identificador del back-end al que se va a enrutar. (Las entidades de back-end se administran mediante Azure Portal, la API y PowerShell). base-url o backend-id deben estar presentes. N/D
sf-partition-key Solo se aplica cuando el back-end es un servicio de Service Fabric y se especifica con "backend-id". Se usa para resolver una partición específica desde el servicio de resolución de nombres. No N/D
sf-replica-type Solo se aplica cuando el back-end es un servicio de Service Fabric y se especifica con "backend-id". Controla si la solicitud debe ir a la réplica principal o secundaria de una partición. No N/D
sf-resolve-condition Solo se aplica cuando el back-end es un servicio de Service Fabric. Condición que identifica si la llamada al back-end de Service Fabric tiene que repetirse con la nueva resolución. No N/D
sf-service-instance-name Solo se aplica cuando el back-end es un servicio de Service Fabric. Permite cambiar instancias de servicio en tiempo de ejecución. No N/D
sf-listener-name Solo se aplica cuando el back-end es un servicio de Service Fabric y se especifica con "backend-id". Service Fabric Reliable Services le permite crear varios agentes de escucha en un servicio. Este atributo se utiliza para seleccionar un agente de escucha específico cuando una instancia de Reliable Service de back-end tiene más de un agente de escucha. Si no se especifica este atributo, API Management intentará usar un agente de escucha sin nombre. Un agente de escucha sin nombre es típico de las instancias de Reliable Services que tienen un solo agente de escucha. No N/D

Uso

Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.

  • Secciones de la directiva: entrante y back-end

  • Ámbitos de la directiva: todos los ámbitos

Establecer cuerpo

Utilice la directiva set-body con la finalidad de establecer el cuerpo del mensaje para las solicitudes entrantes y salientes. Para acceder al cuerpo del mensaje, puede utilizar las propiedades context.Request.Body o context.Response.Body, según si la directiva se encuentra en la sección entrante o saliente.

Importante

Tenga en cuenta que, de forma predeterminada, al acceder al cuerpo del mensaje mediante context.Request.Body o context.Response.Body, se pierde el cuerpo del mensaje original y se debe establecer devolviendo el cuerpo en la expresión. Para conservar el contenido del cuerpo, establezca el parámetro preserveContent en true al acceder al mensaje. Si preserveContent está establecido en true y la expresión devuelve un cuerpo distinto, se utiliza el que se devuelva.

Tenga en cuenta las siguientes consideraciones al utilizar la directiva set-body.

  • Si usa la directiva set-body para devolver un cuerpo nuevo o actualizado, no hay que establecer preserveContent en true porque estará especificando explícitamente el nuevo contenido del cuerpo.
    • No tiene sentido conservar el contenido de una respuesta en la canalización de entrada porque todavía no hay ninguna respuesta.
    • De igual modo, no tiene sentido conservar el contenido de una solicitud en la canalización de salida porque la solicitud ya se ha enviado al servidor en este momento.
    • Si esta directiva se usa cuando no hay ningún cuerpo de mensaje, por ejemplo, en un GET entrante, se producirá una excepción.

Para obtener más información, consulte las secciones context.Request.Body, context.Response.Body y IMessage de la tabla Context variable (Variable de contexto).

Instrucción de la directiva

<set-body>new body value as text</set-body>

Ejemplos

Ejemplo de texto literal

<set-body>Hello world!</set-body>

Ejemplo de acceso al cuerpo como una cadena. Tenga en cuenta que estamos conservando el cuerpo de la solicitud original para que resulte accesible más adelante en la canalización.

<set-body>
@{ 
    string inBody = context.Request.Body.As<string>(preserveContent: true); 
    if (inBody[0] =='c') { 
        inBody[0] = 'm'; 
    } 
    return inBody; 
}
</set-body>

Ejemplo de acceso al cuerpo como un elemento JObject. Tenga en cuenta que, al no conservar el cuerpo de la solicitud original, el acceso posterior a él en la canalización producirá una excepción.

<set-body> 
@{ 
    JObject inBody = context.Request.Body.As<JObject>(); 
    if (inBody.attribute == <tag>) { 
        inBody[0] = 'm'; 
    } 
    return inBody.ToString(); 
} 
</set-body>

Filtro de respuesta según un producto

En este ejemplo se muestra cómo filtrar contenido quitando elementos de datos de la respuesta recibida del servicio back-end al usar el producto Starter. Para ver una demostración de la configuración y el uso de esta directiva, consulte el Episodio 177 de Cloud Cover: More API Management Features with Vlad Vinogradsky (Más características de API Management con Vlad Vinogradsky) y avance hasta el minuto 34:30. Empiece en el minuto 31:50 para ver una introducción a la API de previsión de Dark Sky empleada en esta demostración.

<!-- Copy this snippet into the outbound section to remove a number of data elements from the response received from the backend service based on the name of the api product -->
<choose>
  <when condition="@(context.Response.StatusCode == 200 && context.Product.Name.Equals("Starter"))">
    <set-body>@{
        var response = context.Response.Body.As<JObject>();
        foreach (var key in new [] {"minutely", "hourly", "daily", "flags"}) {
          response.Property (key).Remove ();
        }
        return response.ToString();
      }
    </set-body>
  </when>
</choose>

Uso de plantillas Liquid con la directiva de establecer cuerpo

La directiva set-body se puede configurar para usar el lenguaje de plantillas Liquid para transformar el cuerpo de una solicitud o una respuesta. Esto puede resultar muy eficaz si necesita cambiar completamente el formato del mensaje.

Importante

La implementación de Liquid que se utiliza en la directiva set-body está configurada en el modo de C#. Esto es especialmente importante al realizar tareas como el filtrado. Por ejemplo, para usar un filtro de fecha se requiere usar las mayúsculas y minúsculas de Pascal y el formato de fecha de C#; por ejemplo:

{{body.foo.startDateTime| Date:"yyyyMMddTHH:mm:ssZ"}}

Importante

Para enlazar correctamente con un cuerpo XML mediante la plantilla Liquid, use una directiva set-header para establecer que Content-Type sea application/xml, text/xml (o cualquier tipo que termine en +xml); para un cuerpo JSON, debe ser application/json, texto/json (o cualquier tipo que termine en +json).

Conversión de JSON en SOAP mediante una plantilla Liquid

<set-body template="liquid">
    <soap:Envelope xmlns="http://tempuri.org/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
        <soap:Body>
            <GetOpenOrders>
                <cust>{{body.getOpenOrders.cust}}</cust>
            </GetOpenOrders>
        </soap:Body>
    </soap:Envelope>
</set-body>

Transformación de JSON mediante una plantilla Liquid

{
"order": {
    "id": "{{body.customer.purchase.identifier}}",
    "summary": "{{body.customer.purchase.orderShortDesc}}"
    }
}

Elementos

Nombre Descripción Obligatorio
set-body Elemento raíz. Contiene el cuerpo del texto o una expresión que devuelve un cuerpo.

Propiedades

Nombre Descripción Obligatorio Valor predeterminado
template Se utiliza para cambiar el modo de creación de plantillas que ejecutará la directiva de establecer cuerpo. Actualmente, el único valor admitido es:

- liquid: la directiva de establecer cuerpo usará el motor de plantillas Liquid
No

Para acceder a información sobre solicitud y respuesta, la plantilla Liquid puede enlazar a un objeto de contexto con las siguientes propiedades:

context.
    Request.
        Url
        Method
        OriginalMethod
        OriginalUrl
        IpAddress
        MatchedParameters
        HasBody
        ClientCertificates
        Headers

    Response.
        StatusCode
        Method
        Headers
Url.
    Scheme
    Host
    Port
    Path
    Query
    QueryString
    ToUri
    ToString

OriginalUrl.
    Scheme
    Host
    Port
    Path
    Query
    QueryString
    ToUri
    ToString

Uso

Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.

  • Secciones de la directiva: entrante, saliente y back-end

  • Ámbitos de la directiva: todos los ámbitos

Establecer encabezado HTTP

La directiva set-header asigna un valor a un encabezado de respuesta o de solicitud existente o agrega un nuevo encabezado de este tipo.

Inserta una lista de encabezados HTTP en un mensaje HTTP. Cuando se coloca en un proceso entrante, esta directiva establece los encabezados HTTP para la solicitud que se pasa al servicio de destino. Cuando se coloca en una canalización saliente, esta directiva establece los encabezados HTTP para la respuesta que se está enviando al cliente de la puerta de enlace.

Instrucción de la directiva

<set-header name="header name" exists-action="override | skip | append | delete">
    <value>value</value> <!--for multiple headers with the same name add additional value elements-->
</set-header>

Ejemplos

Ejemplo: agregar encabezado, invalidar existente

<set-header name="some header name" exists-action="override">
    <value>20</value>
</set-header>

Ejemplo: quitar el encabezado

 <set-header name="some header name" exists-action="delete" />

Reenvío de información contextual al servicio back-end

En este ejemplo se muestra cómo aplicar directivas en el nivel de API para proporcionar información contextual al servicio back-end. Para ver una demostración de la configuración y el uso de esta directiva, consulte el Episodio 177 de Cloud Cover: More API Management Features with Vlad Vinogradsky (Más características de API Management con Vlad Vinogradsky) y avance hasta el minuto 10:30. En el minuto 12:10 se realiza una demostración del llamamiento de una operación en el portal para desarrolladores donde podrá ver la directiva en funcionamiento.

<!-- Copy this snippet into the inbound element to forward some context information, user id and the region the gateway is hosted in, to the backend service for logging or evaluation -->
<set-header name="x-request-context-data" exists-action="override">
  <value>@(context.User.Id)</value>
  <value>@(context.Deployment.Region)</value>
</set-header>

Para obtener más información, consulte Policy expressions (Expresiones de política) y Context variable (Variable de contexto).

Nota

Varios valores de un encabezado se concatenan en una cadena CSV, por ejemplo, headerName: value1,value2,value3.

Las excepciones incluyen encabezados estandarizados, cuyos valores:

  • pueden contener comas (User-Agent, WWW-Authenticate, Proxy-Authenticate),
  • pueden contener fechas (Cookie, Set-Cookie, Warning),
  • contienen fechas (Date, Expires, If-Modified-Since, If-Unmodified-Since, Last-Modified, Retry-After).

En el caso de esas excepciones, varios valores de encabezado no se concatenarán en una cadena y se pasarán como encabezados independientes, por ejemplo, User-Agent: value1 User-Agent: value2 User-Agent: value3.

Elementos

Nombre Descripción Obligatorio
set-header Elemento raíz.
value Especifica el valor del encabezado que se va a establecer. Para varios encabezados con el mismo nombre, agregue más elementos value. No

Propiedades

Nombre Descripción Obligatorio Valor predeterminado
exists-action Especifica la acción que se debe realizar cuando ya se ha especificado un encabezado. Este atributo debe tener uno de los siguientes valores:

- override: sustituye el valor del encabezado existente.
- skip: no sustituye el valor del encabezado existente.
- append: anexa el valor al encabezado existente.
- delete: quita el encabezado de la solicitud.

Cuando se establece en override, si se inscriben varias entradas con el mismo nombre, se establece el encabezado de acuerdo con todas ellas (que se inscribirán varias veces); solo los valores mostrados se establecerán en el resultado.
No override
name Especifica el nombre del encabezado que se va a establecer. N/D

Uso

Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.

  • Secciones de la directiva: inbound, outbound, backend, on-error

  • Ámbitos de la directiva: todos los ámbitos

Establecimiento del parámetro de cadena de consulta

La directiva set-query-parameter agrega o elimina el parámetro de cadena de consulta de la solicitud, o bien sustituye su valor. Se puede utilizar para pasar parámetros de consulta previstos por el servicio back-end que tienen carácter opcional o que nunca están presentes en la solicitud.

Instrucción de la directiva

<set-query-parameter name="param name" exists-action="override | skip | append | delete">
    <value>value</value> <!--for multiple parameters with the same name add additional value elements-->
</set-query-parameter>

Ejemplo


<set-query-parameter name="api-key" exists-action="skip">
  <value>12345678901</value>
</set-query-parameter>

Reenvío de información contextual al servicio back-end

En este ejemplo se muestra cómo aplicar directivas en el nivel de API para proporcionar información contextual al servicio back-end. Para ver una demostración de la configuración y el uso de esta directiva, consulte el Episodio 177 de Cloud Cover: More API Management Features with Vlad Vinogradsky (Más características de API Management con Vlad Vinogradsky) y avance hasta el minuto 10:30. En el minuto 12:10 se realiza una demostración del llamamiento de una operación en el portal para desarrolladores donde podrá ver la directiva en funcionamiento.

<!-- Copy this snippet into the inbound element to forward a piece of context, product name in this example, to the backend service for logging or evaluation -->
<set-query-parameter name="x-product-name" exists-action="override">
  <value>@(context.Product.Name)</value>
</set-query-parameter>

Para obtener más información, consulte Policy expressions (Expresiones de política) y Context variable (Variable de contexto).

Elementos

Nombre Descripción Obligatorio
set-query-parameter Elemento raíz.
value Especifica el valor del parámetro de consulta que se debe establecer. Para varios parámetros de consulta con el mismo nombre, agregue más elementos value.

Propiedades

Nombre Descripción Obligatorio Valor predeterminado
exists-action Especifica la acción que se debe realizar cuando ya se especifica un parámetro de consulta. Este atributo debe tener uno de los siguientes valores:

- override: sustituye el valor del parámetro de consulta existente.
- skip: no sustituye el valor del parámetro de consulta existente.
- append: anexa el valor al del parámetro de consulta existente.
- delete: quita el parámetro de consulta de la solicitud.

Cuando se establece en override, se inscriben varias entradas con los resultados del mismo nombre del parámetro de consulta que se están estableciendo de acuerdo con todas las entradas (que se inscribirán varias veces); solo los valores mostrados se establecerán en el resultado.
No override
name Especifica el nombre del parámetro de consulta que se debe establecer. N/D

Uso

Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.

  • Secciones de la directiva: entrante y back-end

  • Ámbitos de la directiva: todos los ámbitos

URL de reescritura

La directiva rewrite-uri convierte una dirección URL de solicitud de su forma pública a la que espera recibir el servicio web, como se muestra en el siguiente ejemplo.

  • URL pública: http://api.example.com/storenumber/ordernumber

  • URL de solicitud: http://api.example.com/v2/US/hardware/storenumber&ordernumber?City&State

    Esta directiva se puede utilizar cuando una URL apta para el explorador o para individuos debe transformarse en el formato de URL que espera el servicio web. Esta directiva solo debe aplicarse al exponer un formato de URL alternativo, como URL limpias, direcciones URL RESTful y direcciones URL sencillas o aptas para optimización del motor de búsqueda que son URL puramente estructurales que no contienen una cadena de consulta, sino solo la ruta del recurso (después del esquema y la autoridad). Este procedimiento se realiza con fines estéticos, de usabilidad o de optimización del motor de búsqueda (SEO).

Nota

Solo puede agregar parámetros de cadena de consulta mediante esta directiva. No puede agregar ningún parámetro de ruta de plantilla adicional en la URL de reescritura.

Instrucción de la directiva

<rewrite-uri template="uri template" copy-unmatched-params="true | false" />

Ejemplo

<policies>
    <inbound>
        <base />
        <rewrite-uri template="/v2/US/hardware/{storenumber}&{ordernumber}?City=city&State=state" />
    </inbound>
    <outbound>
        <base />
    </outbound>
</policies>
<!-- Assuming incoming request is /get?a=b&c=d and operation template is set to /get?a={b} -->
<policies>
    <inbound>
        <base />
        <rewrite-uri template="/put" />
    </inbound>
    <outbound>
        <base />
    </outbound>
</policies>
<!-- Resulting URL will be /put?c=d -->
<!-- Assuming incoming request is /get?a=b&c=d and operation template is set to /get?a={b} -->
<policies>
    <inbound>
        <base />
        <rewrite-uri template="/put" copy-unmatched-params="false" />
    </inbound>
    <outbound>
        <base />
    </outbound>
</policies>
<!-- Resulting URL will be /put -->

Elementos

Nombre Descripción Obligatorio
rewrite-uri Elemento raíz.

Atributos

Atributo Descripción Obligatorio Valor predeterminado
template La dirección URL del servicio web real con cualquier parámetro de cadena de consulta. Cuando se usan expresiones, todo el valor debe ser una expresión. N/D
copy-unmatched-params Especifica si los parámetros de consulta de la solicitud entrante no presentes en la plantilla de la dirección URL original se agregan en la dirección URL definida por la plantilla de reescritura No true

Uso

Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.

  • Secciones de la directiva: inbound (entrada)

  • Ámbitos de la directiva: todos los ámbitos

Transformar XML mediante una XSLT

La directiva Transform XML using an XSLT aplica una transformación XSL al XML del cuerpo de la solicitud o la respuesta.

Instrucción de la directiva

<xsl-transform>
    <parameter name="User-Agent">@(context.Request.Headers.GetValueOrDefault("User-Agent","non-specified"))</parameter>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output method="xml" indent="yes" />
        <xsl:param name="User-Agent" />
        <xsl:template match="* | @* | node()">
            <xsl:copy>
                <xsl:if test="self::* and not(parent::*)">
                    <xsl:attribute name="User-Agent">
                        <xsl:value-of select="$User-Agent" />
                    </xsl:attribute>
                </xsl:if>
                <xsl:apply-templates select="* | @* | node()" />
            </xsl:copy>
        </xsl:template>
    </xsl:stylesheet>
  </xsl-transform>

Ejemplo

<policies>
  <inbound>
      <base />
  </inbound>
  <outbound>
      <base />
      <xsl-transform>
          <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
            <xsl:output omit-xml-declaration="yes" method="xml" indent="yes" />
            <!-- Copy all nodes directly-->
            <xsl:template match="node()| @*|*">
                <xsl:copy>
                    <xsl:apply-templates select="@* | node()|*" />
                </xsl:copy>
            </xsl:template>
          </xsl:stylesheet>
    </xsl-transform>
  </outbound>
</policies>

Elementos

Nombre Descripción Obligatorio
xsl-transform Elemento raíz.
parámetro Permite definir las variables utilizadas en la transformación. No
xsl:stylesheet Elemento raíz de la hoja de estilo. Todos los elementos y atributos definidos dentro de él cumplen la especificación XSLT estándar.

Uso

Esta directiva puede usarse en las siguientes secciones y ámbitos de directiva.

  • Secciones de la directiva: entrante y saliente

  • Ámbitos de la directiva: todos los ámbitos

Pasos siguientes

Para obtener más información, vea los temas siguientes: