首页 > 解决方案 > 本地主机上的 Azure Functions 代理 404

问题描述

我有一个 Azure Function App,其 URLhttp://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/,这应该可以正常工作。

有什么建议么?提前感谢您提供的任何帮助!

标签: azureproxylocalhostazure-functions

解决方案


毕竟我已经解决了这个问题。

proxies.json 默认情况下未设置为复制到输出目录。

您需要确保将其设置为始终复制

在 Visual Studio 中:

右键单击proxies.json> 单击属性> 将Copy to output directory设置为Copy Always

在 Visual Studio Code(和其他编辑器)中: 打开ProjectName.csproj并添加一个条目以始终复制proxies.json到输出目录。

<ItemGroup>
  <None Update="proxies.json">
    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  </None>
</ItemGroup>

推荐阅读