Skip to main content Explore View all products (200+) Microsoft Foundry Azure Copilot GitHub Copilot Azure Kubernetes Service (AKS) Azure Cosmos DB Azure Database for PostgreSQL Azure Arc Microsoft Fabric Linux virtual machines in Azure Foundry Models Foundry Agent Service Foundry IQ Foundry Tools Foundry Control Plane Observability in Foundry Control Plane Azure OpenAI in Foundry Models Azure Speech in Foundry Tools Azure Machine Learning View all databases Azure Cosmos DB Azure DocumentDB Azure SQL Azure Database for PostgreSQL Azure Managed Redis Microsoft Fabric Azure Databricks Linux virtual machines in Azure Windows Server on Azure Azure Functions Azure Virtual Machine Scale Sets Azure API Management Azure Container Apps Azure Kubernetes Service (AKS) Azure Kubernetes Fleet Manager Azure Container Registry Azure Red Hat OpenShift Azure Container Instances Azure Container Storage Azure Arc Azure Local Microsoft Defender for Cloud Azure Monitor Microsoft Sentinel Azure Migrate View all solutions (40+) Cloud solutions for small and medium businesses Cloud migration and modernization center Data analytics for AI Azure Databases AI apps and agents Microsoft Marketplace Microsoft Sovereign Cloud AI apps and agents Responsible AI with Azure AI Infrastructure Data analytics for AI Machine learning operations (MLOps) Low-code application development on Azure Integration Services Serverless computing DevOps Migration and modernization center .NET apps migration Databases on Azure Linux on Azure Oracle on Azure SAP on the Microsoft Cloud Adaptive cloud High-performance computing (HPC) Infrastructure as a service (IaaS) Resiliency Azure Essentials Frontier Accelerate for Azure FinOps on Azure Microsoft Marketplace Azure pricing overview Create an Azure account Free Azure services Flexible purchase options Pricing calculator FinOps on Azure Maximize ROI from AI Azure savings plans Azure reservations Azure Hybrid Benefit Virtual Machines Azure SQL Microsoft Foundry Microsoft Fabric Azure Kubernetes Service (AKS) Microsoft Defender for Cloud View more Software Development Companies Microsoft Marketplace Find a partner Resources for Azure partners Get started with Azure Customer stories Analyst reports, white papers, and e-books Videos Learn more about cloud computing Documentation Explore Azure portal Developer resources Quickstart templates Resources for startups Developer community Students Azure for partners Blog Events and Webinars Learn Support Contact Sales Get started with Azure Sign in

Azure API Management offers the ability to control and modify the behavior of published APIs using out-of-the-box policies that can be configured from the Publisher portal. These policies are applied to the inbound request or the outbound response in the API Management proxy that sits between the API consumer and the API backend. Policy expressions augment the ability of API Management policies, providing a sophisticated means to control traffic and modify API behavior without requiring you to write any code or modifying any backend services. You can use policy expressions as attribute values or text values in most API Management policies.

Syntax

Policy expressions use the C# 6.0 syntax and have access to a subset of the .NET Framework types. They also have access to an implicit context variable whose members have information about the request and/or the response.

For instance,  in the Set Variable policy, you can use  a policy expression to set the value as:

The policy expression in the above statement is encapsulated as “@(expression)”, where expression is a well-formed C# statement. This expression will evaluate as true if the request originates from an iPad or an iPhone client. Here, the context variable provides access to the Request object, whose member Headers provides access to the headers included in the request by the application invoking the API. Note you can’t have a mix of normal text and expressions as a parameter value in a policy. Multi-statement expressions have to be encapsulated in curly-braces as”@{expression 1; expression 2}”.  All paths in a multi-statement expression must return a value that can be used by the policy.

Orchestration and API Redirection

Policy expressions when used in conjunction with API Management advanced policies to orchestrate sophisticated API re-direction and behavior updates. You can use this to project a modern, updated façade for your published API without rewriting the backend services. Here’s another example of a policy expression, that when used in the inbound path can be used to redirect an incoming request based on version information included as a query parameter in a published API:

Context in policy expressions

The implicitly-available context variable provides access to the request and/or response parameter of the API call. In addition to the request and response, context also provides access to information about your API Management service instance, such as the published APIs, operations, products, users, subscriptions and variables. Note that the contents of the context variable can change in each stage of the pipeline. For instance, context.Request.Url will contain the transformed URL after the Rewrite URL policy has been executed. You can use the Set Variable policy in conjunction with policy expressions to preserve the current contents of an object in the context variable for later use, as below:

  n    ";
      str += context.Request.Method;
      str += " "";
      str += context.Variables.GetValueOrDefault("requestPath");
      str += """;
      return str;
    }" />

The above policy snippet inserts the method & URL path that was used to invoke the original request into the “” section of the response body as the “” element. Since the policy definition uses XML, the characters ‘<‘ and ‘>’ are escaped in the from parameter, but not in the multi-statement policy expression in the to parameter. In this example, we use set-variable to save the request URL path from the context and then use this in the find-and-replace policy.   For a short tutorial on this, see the screencast on Policy Expressions on Channel 9. To learn more, visit Policies in Azure API Management.

 

  
    
    
    
    
  
  
  
    
    
    n    ";
      str += context.Request.Method;
      str += " "";
      str += context.Variables.GetValueOrDefault("requestPath");
      str += """;
      return str;
    }" />
  

The above policy snippet inserts the method & URL path that was used to invoke the original request into the “” section of the response body as the “” element. Since the policy definition uses XML, the characters ‘<‘ and ‘>’ are escaped in the from parameter, but not in the multi-statement policy expression in the to parameter. In this example, we use set-variable to save the request URL path from the context and then use this in the find-and-replace policy.   For a short tutorial on this, see the screencast on Policy Expressions on Channel 9. To learn more, visit Policies in Azure API Management.

WE ARE MICROSOFT

Explore Microsoft Foundry

The future of AI starts here. Envision your next great AI app with the latest technologies. Get started with Azure.