【发布时间】:2020-05-30 18:36:29
【问题描述】:
我有一个 Azure 函数应用程序,其中包含 URL http://localhost:7072/api/create-room 处的函数以及其他函数。这个特殊的函数是一个允许匿名访问的HTTPTrigger,并接受GET动词:
[HttpTrigger(AuthorizationLevel.Anonymous, "get")]
除此之外,我还有一个单独的函数应用程序,它只托管一个 proxies.json 文件并仅用作函数代理。我的代理功能在本地端口7071 上运行。
我的代理文件目前如下所示:
{
"$schema": "http://json.schemastore.org/proxies",
"proxies": {
"chatNegotiate": {
"matchCondition": {
"route": "/api/chat/negotiate",
"methods": [
"POST"
]
},
"backendUri": "%chat_api%/api/BeginNegotiate"
},
"chatMessages": {
"matchCondition": {
"route": "/api/chat/messages",
"methods": [
"POST"
]
},
"backendUri": "%chat_api%/api/PostMessage"
},
"createRoom": {
"matchCondition": {
"route": "/api/create-room",
"methods": [
"GET"
]
},
"backendUri": "%session_api%/api/CreateRoom"
}
}
}
当这两个功能应用都部署到 Azure 时,一切都像做梦一样。我可以提出请求,它们被转发,请求回来。一切都很美好。
但是,当我在本地运行这些函数时,请求永远不会从代理转发,代理返回 404。我可以直接在 7072 上本地运行的另一个函数应用上点击该函数,一切都很好那里,但当我通过代理到达时根本没有。
代理本身返回:
[30/05/2020 18:24:30] Host lock lease acquired by instance ID '0000000000000000000000002D5B6BEA'.
[30/05/2020 18:24:34] Executing HTTP request: {
[30/05/2020 18:24:34] "requestId": "9004b8e2-f208-4a98-8b48-6f85bca41281",
[30/05/2020 18:24:34] "method": "GET",
[30/05/2020 18:24:34] "uri": "/api/create-room"
[30/05/2020 18:24:34] }
[30/05/2020 18:24:34] Executed HTTP request: {
[30/05/2020 18:24:34] "requestId": "9004b8e2-f208-4a98-8b48-6f85bca41281",
[30/05/2020 18:24:34] "method": "GET",
[30/05/2020 18:24:34] "uri": "/api/create-room",
[30/05/2020 18:24:34] "identities": [],
[30/05/2020 18:24:34] "status": 404,
[30/05/2020 18:24:34] "duration": 15
[30/05/2020 18:24:34] }
从我看过的例子来看,例如https://chsakell.com/2019/02/03/azure-functions-proxies-in-action/,这应该可以正常工作。
有什么建议吗?提前感谢您提供的任何帮助!
【问题讨论】:
-
你在本地更新了local.settings.json了吗?
-
如果您收到 404,则表示您调用了错误的 URL。确保在 local.settings.json 中拥有生产环境中的所有变量。您还可以尝试在代理上硬编码 localhost:7072 以进行调试
-
我的 local.settings.json 是最新的并且适用于代理。我也尝试过硬编码,结果相同。
标签: azure proxy localhost azure-functions