使用Azure APIM策略获取策略中的指定URL部分

时间:2019-07-18 16:22:32

标签: azure azure-api-management

是否可以在策略内获取下面的指定网址部分:

<policies>
        <inbound>
            <base />    
        </inbound>
        <backend>
            <base />
        </backend>
        <outbound>
            <base />
            <find-and-replace from="https://thirdparty/certs" 
                 to="@(specified url part)" />        
        </outbound>
        <on-error>
            <base />
        </on-error>
    </policies>

请注意,整个网址可能包含版本控制和前缀。

2 个答案:

答案 0 :(得分:0)

策略表达式的示例,当在入站路径中使用时,可用于基于发布的API中作为查询参数包括的版本信息来重定向传入请求。

<choose>
    <when condition="@(context.Request.Url.Query.GetValueOrDefault("version") == "2014-03")">
      <set-backend-service base-url="http://contoso.com/api/1.6/" />
    </when>
    <otherwise>
      <set-backend-service base-url="http://contoso.com/api/2.0/"
    </otherwise>
  </choose>

https://azure.microsoft.com/en-us/blog/policy-expressions-in-azure-api-management/

查找更多详细信息

答案 1 :(得分:0)

整个URI(假设https://contoso.com/myapi/.wellknown/openid-config)包括:

  1. 方案:context.Request.OriginalUrl.Scheme
  2. 主持人:context.Request.OriginalUrl.Host
  3. 可选端口:context.Request.OriginalUrl.Port
  4. API后缀:context.Api.Path
  5. 操作路径:其余部分

因此,URL的运算部分可以通过近似context.Request.OriginalUrl.Path.Trim('/').Substring(context.Api.Path.Trim('/').Length)

来计算。