[英]Azure APIM rewrite url to have no suffix url
我在 APIM 中有一個 API 包含不同的操作。 這些操作之一稱為例如testOp
testOp
將發送給它的請求轉發到 azure 中的 function 應用程序 (FA)。 我沒有在策略中明確寫入 FA URL,而是決定將其寫入名為fa-url
的命名值中。 因此 API 策略如下所示:
<policies>
<inbound>
<base />
<set-backend-service base-url="{{fa-url}}" />
<rewrite-uri template="/" />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
</outbound>
<on-error>
<base />
</on-error>
</policies>
此命名值是通過 ARM 模板創建的,該模板將此命名值的值設置為 FA 的觸發器 URL。 這是 ARM 代碼:
{
"properties": {
"tags": [],
"secret": true,
"displayName": "fa-url",
"value": "[listsecrets(resourceId(parameters('faRG'), 'Microsoft.Web/sites/functions', parameters('functionAppName'), parameters('functionName')), variables('apiFuncApp')).trigger_url]"
},
"name": "[concat(parameters('ApimServiceName'), '/fa-url')]",
"type": "Microsoft.ApiManagement/service/namedValues",
"apiVersion": "2021-01-01-preview"
},
這個 Arm 模板和命名值將生成一個 url,看起來類似於:
https://fa-name.xx.companything.net/api/realFunctionname?code=123456=
所以,這個 url 以一個以等號結尾的查詢參數結尾。 現在,問題是:這個 API 操作( testOp
)在其定義中有一個 URL
testOp 看起來與此類似:
因此,當我嘗試通過此操作向 FA 發送請求時,我收到404 Not Found
或401 Unauthorized
錯誤。 查了trace,原因基本是因為rewrite URL在fa URL的末尾加了一個'/'。 所以而不是發送到:
https://fa-name.xx.companything.net/api/realFunctionname?code=123456=
它發送到
https://fa-name.xx.companything.net/api/realFunctionname?code=123456=/
如果我刪除了重寫 URL function,我仍然會收到錯誤,因為現在它將發送到:
https://fa-name.xx.companything.net/api/realFunctionname?code=123456=/testOp
有什么方法可以防止在后端 URL 中添加任何后綴? 或者你有任何其他建議來解決這個問題嗎?
注意:我還嘗試將重寫 URL 設置為空字符串,但 azure 在我這樣做時拒絕保存策略。
好的,看來我唯一需要做的就是使用這個重寫策略:
<rewrite-uri template="?" />
這將令人驚訝地使 URL 看起來完全符合我的要求,即:
https://fa-name.xx.companything.net/api/realFunctionname?code=123456=
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.