Azure API 管理服务中 Websocket URL 的通配符

问题描述 投票:0回答:1

我想将 Websocket 端点从 API 管理服务映射到我的底层容器。

顶级 URL 是:

wss://rosieapiservice.azure-api.net/ws/CA1234237643 
/ws/ 之后的所有内容都是每个唯一 Websocket 调用的唯一标识符。

对于我的底层容器服务,URL 看起来几乎相同,但没有安全的 Websocket:

ws://rosie-demo.eastus.azurecontainer.io/ws/CA1234237643 

如果我只使用没有变量 ID 的部分,我就能够成功连接到我的 websocket:

wss://rosieapiservice.azure-api.net/ws/ 

但是,一旦我尝试使用附加到 URL 的 ID 进行连接,我就会收到状态代码:400 错误请求。

根据我在一些文档中找到的内容,我尝试定义一个处理通配符的策略:

<inbound>
    <base />
    <set-backend-service base-url="wss://rosieapiservice.azure-api.net/ws/@(context.Request.Url.Path.Substring(context.Api.Path.Length + 4))" />
</inbound>

但这似乎没有帮助。关于如何在无需修改底层代码的情况下执行此操作的任何指示或建议?

azure azure-api-management
1个回答
0
投票

我相信,您想修改后端Url中的唯一标识符值。可以说,我有

https://{instance_name}.azure-api.net/echo/CA1234237643
端点,我将修改后端 Url 中的
/ws/CA1234237643
。我已使用此 URL 进行测试,因为我没有向您的端点公开。

我正在使用以下给定的政策来满足要求。

<policies>
    <inbound>
        <base />
        <set-backend-service base-url="{Your_URL}" />
        <rewrite-uri template="@("/ws" + context.Request.Url.Path.Substring(context.Request.Url.Path.LastIndexOf('/')))" />
    </inbound>
</policies>

我能够根据Trace得到预期的响应。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.