我有一个 Web api,其路径为:
<WebApiHost>/api/v1/operation1
<WebApiHost>/api/v1/operation2
<WebApiHost>/api/v1/operation3
在我的 Azure API 管理服务中,我希望前端是:
<ApiManagementHost>/api-name/v1/operation1
<ApiManagementHost>/api-name/v1/operation2
<ApiManagementHost>/api-name/v1/operation3
实现这一目标的最佳方法是什么?
我尝试通过导入 Open API 规范文件在 API 管理中创建 API,并将 API 后缀设置为“api-name”并在路径中使用版本标识符“v1”来实现此目的,然后就消失了通过每个操作前端并删除来自开放 API 定义的路径的“/api/v1/”部分。然后我尝试添加适用于所有操作的入站策略,例如:
<inbound>
<choose>
<when condition="@(context.Request.OriginalUrl.Path.StartsWith("/test/pmi-quotes/v1/"))">
<rewrite-uri template="/api/v1/@(context.Request.OriginalUrl.Path.Replace("/test/pmi-quotes/v1/", ""))" />
</when>
<otherwise>
<rewrite-uri template="/api/@(context.Request.OriginalUrl.Path)" />
</otherwise>
</choose>
<base />
</inbound>
其想法是将“/api-name/v1/{operation-path}”请求重写为“/api/v1/{operation-path}”
但这会返回 404。查看跟踪,似乎重写规则未解析,因为 URL 包含表达式:
forward-request (0.108 ms)
{
"message": "Request is being forwarded to the backend service. Timeout set to 300 seconds",
"request": {
"method": "GET",
"url": "<WebApiHost>/api/v1/@(context.Request.OriginalUrl.Path.Replace(\"/api-name/v1/\", \"\"))",
"headers": [