在Azure API管理中重命名出站请求中的查询参数
使用Azure API管理中的策略,我试图重命名一个查询参数,但它不起作用。如果我将copy unmatched params=“false”更改为copy unmatched params=“true”,则它可以工作,但行为是所有不匹配的参数都将被传递到后端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
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版本”、“金额”和“搜索字段”查询参数。有几种方法可以做到这一点:
@(context.Request.OriginalUrl.Query.GetValueOrDefault(“查询”))
。缺点是“query”参数是必需的,因此任何没有它的请求都将导致404从上一个表达式中获取空值的原因是,到那时,URI已经重写为“/”,并且只设置了“api版本”、“金额”和“搜索字段”查询参数。有几种方法可以做到这一点:
@(context.Request.OriginalUrl.Query.GetValueOrDefault(“查询”))
。缺点是“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>