【API Management】使用 APIM Inbound Policy 来修改Content‐Type Header的值

API,Policy ,Inbo,使用 · 浏览次数 : 2

小编点评

是的,在APIM提供API服务管理的情况下,可以通过设置策略来改变请求的Header。 **方法:** * 使用 `set-header` 指令在 `inbound` 策略中设置 `Content-Type` 头。 * 使用 `set-header` 指令在 `outbound` 策略中设置 `Content-Type` 头。 **示例:** ```json { "policies": [ { "name": "Set Content-Type Header", "type": "set-header", "from": "request.getHeader('Content-Type')", "to": "Content-Type", "value": "application/json; charset=utf-8" } ] } ``` **说明:** * 可以在 `inbound` 或 `outbound` 策略中设置多个 `set-header` 指令。 * `set-header` 指令可以用于设置多个 HTTP 头。 * 如果要设置多个头,可以使用一个 `set-header` 指令将多个头设置到请求或响应的 `Content-Type` 头中。

正文

问题描述

在使用APIM提供API服务管理的场景中,遇见了客户端请求时候发送的请求Header中的Content-Type不满足后台服务器的要求,但是在客户端要求客户修改代码难度较高。

所以面对这样的情况,是否在APIM端修改为对请求的Content-Type进行覆写呢? 

 

问题解答

可以的。

APIM支持通过设置策略(Policy)来改变请求的Header,使用的策略语句时 set-header, 可以实现覆写,追加,删除等操作。

在本案例中,需要使用的 set-header策略如下:

<inbound> 
        <base />
        <set-header name="Content-Type" exists-action="override">
            <value>application/json; charset=utf-8</value>
        </set-header>
</inbound>

注意:因为时需要把请求传递到后端API服务器,所以需要在APIM的入站(Inbound)策略中设置,如果设置在出站(Outbound)策略中,它修改的不是请求的Header,而变成了APIM返回给客户端调用的Response Header。

 

参考资料

APIM Set-Header策略:​​https://docs.azure.cn/zh-cn/api-management/set-header-policy​​ 

The set-header policy assigns a value to an existing HTTP response and/or request header or adds a new response and/or request header.

Use the policy to insert a list of HTTP headers into an HTTP message. When placed in an inbound pipeline, this policy sets the HTTP headers for the request being passed to the target service. When placed in an outbound pipeline, this policy sets the HTTP headers for the response being sent to the gateway’s client.

与【API Management】使用 APIM Inbound Policy 来修改Content‐Type Header的值相似的内容:

【API Management】使用 APIM Inbound Policy 来修改Content‐Type Header的值

问题描述 在使用APIM提供API服务管理的场景中,遇见了客户端请求时候发送的请求Header中的Content-Type不满足后台服务器的要求,但是在客户端要求客户修改代码难度较高。 所以面对这样的情况,是否在APIM端修改为对请求的Content-Type进行覆写呢? 问题解答 可以的。 API

【Azure API 管理】Azure APIM服务集成在内部虚拟网络后,在内部环境中打开APIM门户使用APIs中的TEST功能失败

问题描述 使用微软API管理服务(Azure API Management),简称APIM。 因为公司策略要求只能内部网络访问,所以启用了VNET集成。集成方式见: (在内部模式下使用 Azure API 管理连接到虚拟网络:https://docs.azure.cn/zh-cn/api-manag

【Azure API Management】实现在API Management服务中使用MI(管理标识 Managed Identity)访问启用防火墙的Storage Account

问题描述 在Azure的同一数据中心,API Management访问启用了防火墙的Storage Account,并且把APIM的公网IP地址设置在白名单。但访问依旧是403 原因是: 存储帐户部署在同一区域中的服务使用专用的 Azure IP 地址进行通信。 因此,不能基于特定的 Azure 服

【Azure API 管理】APIM如何实现对部分固定IP进行访问次数限制呢?如60秒10次请求

问题描述 使用Azure API Management, 想对一些固定的IP地址进行访问次数的限制,如被限制的IP地址一分钟可以访问10次,而不被限制的IP地址则可以无限访问? ChatGPT 解答 最近ChatGPT爆火,所以也把这个问题让ChatGPT来解答,然后人工验证它的回答正确与否? 根据

如此丝滑的API设计,用起来真香

谈及软件中的设计,无论是架构设计还是程序设计还是说API设计, 原则其实都差不多,要能够松耦合、易扩展、注意性能。遵循上述这些API的设计规则, 相信大家都能设计出比较丝滑的API。当然如果还有其他的API设计中的注意点也欢迎在评论区留言。

API 开发的后盾:平台工程提供强力动态支持

过去几年,开发团队一直在发展传统的 DevOps。一些开发人员认为,CloudOps 或 DeploymentOps 等新实践的兴起将会导致回到孤岛问题。其他人则不愿意在承担所有其他职责之外构建、部署、运行和维护运维。显然,确实需要新的云原生开发策略,而不是典型的 DevOps。这就是平台工程的用武

简单的限流过滤器

API接口都是提供给第三方服务/客户端调用,所有请求地址以及请求参数都是暴露给用户的。 每次请求一个HTTP请求,用户都可以通过F12,或者抓包工具看到请求的URL链接,然后copy出来。这样是非常不安全的,有人可能会恶意的刷我们的接口,那这时该怎么办呢? 增加一个全局过滤器 获取客户端的IP 限制

[转帖]API架构风格对比:SOAP vs REST vs GraphQL vs RPC

https://www.cnblogs.com/charlieroro/p/14570214.html 最近一段时间关于GraphQL的讨论很多,一些项目中也相继用到了这种风格,但使用是否合理,是否存在杀鸡用牛刀这样的问题,还有待商榷。 译自:Comparing API Architectural

[转帖]api网关介绍

https://www.cnblogs.com/jackssybin/p/16282788.html 1.什么是网关 API网关是一个系统的唯一入口。是众多分布式服务唯一的一个出口。它做到了物理隔离,内网服务只有通过网关才能暴露到外网被别人访问。简而言之:网关就是你家的大门 2.提供了哪些功能 身份

[转帖]API架构风格对比:SOAP vs REST vs GraphQL vs RPC

https://www.cnblogs.com/charlieroro/p/14570214.html 最近一段时间关于GraphQL的讨论很多,一些项目中也相继用到了这种风格,但使用是否合理,是否存在杀鸡用牛刀这样的问题,还有待商榷。 译自:Comparing API Architectural