在Azure API管理中重命名出站请求中的查询参数

在Azure API管理中重命名出站请求中的查询参数,azure,azure-api-management,Azure,Azure Api Management,使用Azure API管理中的策略,我试图重命名一个查询参数,但它不起作用。如果我将copy unmatched params=“false”更改为copy unmatched params=“true”,则它可以工作,但行为是所有不匹配的参数都将被传递到后端API,这将允许客户端将其自己的查询参数注入我们不希望的后端请求 其他一切都很好 我想转换一个传入的请求,如下所示: https://{site}/search?query=dylan 致: 唯一不起作用的部分是将查询参数转换为名为“se

使用Azure API管理中的策略,我试图重命名一个查询参数,但它不起作用。如果我将copy unmatched params=“false”更改为copy unmatched params=“true”,则它可以工作,但行为是所有不匹配的参数都将被传递到后端API,这将允许客户端将其自己的查询参数注入我们不希望的后端请求

其他一切都很好

我想转换一个传入的请求,如下所示:

https://{site}/search?query=dylan
致:

唯一不起作用的部分是将查询参数转换为名为“search”而不是query,而不允许从入站querystring传递所有参数。我怎样才能解决这个问题

<policies>
    <inbound>
        <rewrite-uri template="/" copy-unmatched-params="false" />
        <set-header name="api-key" exists-action="override">
            <value>THIS-IS-API-KEI</value>
        </set-header>
        <set-query-parameter name="api-version" exists-action="override">
            <value>2018-1-11</value>
        </set-query-parameter>
        <set-query-parameter name="amount" exists-action="override">
            <value>1000</value>
        </set-query-parameter>
        <set-query-parameter name="searchFields" exists-action="override">
            <value>Album,Artist</value>
        </set-query-parameter>
        <set-query-parameter name="search" exists-action="override">
            <value>@(context.Request.Url.Query.GetValueOrDefault("query"))</value>
        </set-query-parameter>
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>

这是API-KEI
2018-1-11
1000
专辑,艺术家
@(context.Request.Url.Query.GetValueOrDefault(“查询”))

从上一个表达式中获取空值的原因是,到那时,您的URI已经重写为“/”,并且只设置了“api版本”、“金额”和“搜索字段”查询参数。有几种方法可以做到这一点:

  • 请参阅原始Url:
    @(context.Request.OriginalUrl.Query.GetValueOrDefault(“查询”))
  • 将查询添加到操作URI模板-search?query={query}-并从重写URI策略中引用它:
    。缺点是“query”参数是必需的,因此任何没有它的请求都将导致404

  • 从上一个表达式中获取空值的原因是,到那时,URI已经重写为“/”,并且只设置了“api版本”、“金额”和“搜索字段”查询参数。有几种方法可以做到这一点:

  • 请参阅原始Url:
    @(context.Request.OriginalUrl.Query.GetValueOrDefault(“查询”))
  • 将查询添加到操作URI模板-search?query={query}-并从重写URI策略中引用它:
    。缺点是“query”参数是必需的,因此任何没有它的请求都将导致404

  • 尝试使用变量。在开头将值分配给变量,并使用该变量分配新的查询参数

    尝试使用变量。在开头将值分配给变量,并使用该变量分配新的查询参数

    您可以使用URL字符串和简单替换方法重命名查询中的参数。在这种情况下,参数不是强制性的

    <inbound>
         <base />
         <rewrite-uri template="@{
            return "/some-url-here-or-your-previously-constructed-url" + context.Request.OriginalUrl.QueryString
                .Replace("old-name", "new-name");
             }" copy-unmatched-params="false" />
     </inbound>
    

    您可以使用URL字符串和简单替换方法重命名查询中的参数。在这种情况下,参数不是强制性的

    <inbound>
         <base />
         <rewrite-uri template="@{
            return "/some-url-here-or-your-previously-constructed-url" + context.Request.OriginalUrl.QueryString
                .Replace("old-name", "new-name");
             }" copy-unmatched-params="false" />
     </inbound>