【问题标题】:Azure Function Proxy that works locally and on Azure在本地和 Azure 上运行的 Azure Function Proxy
【发布时间】:2023-02-01 16:53:58
【问题描述】:

我正在创建一个将公开一些 API 的 Azure 函数。
.Net7,Azure Functions 版本 4,隔离。

主机.json:

{
  "version": "2.0",
  "extensions": {
    "http": {
      "routePrefix": ""
    }
  },
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    }
  }
}

本地设置.json:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
    "AzureWebJobsFeatureFlags": "EnableProxies",
    "AZURE_FUNCTION_PROXY_DISABLE_LOCAL_CALL": "true"
  }
}

我添加了端点,添加了 swagger,一切正常。 现在我正在尝试用 swagger ui 替换欢迎页面。

我尝试了两种方法:

  1. 使用代理将/路由到/swagger/ui
    {
      "$schema": "http://json.schemastore.org/proxies",
      "proxies": {
        "swagger": {
          "matchCondition": {
            "methods": [ "GET" ],
            "route": "/"
          },
          "backendUri": "http://localhost:7071/swagger/ui"
        }
      }
    }
    
    1. 使用代理重定向到swagger/ui,所以当有人打开https://myapi.azurewebsites.net/而不是看到欢迎页面时,他将被重定向到https://myapi.azurewebsites.net/swagger/ui
    {
      "$schema": "http://json.schemastore.org/proxies",
      "proxies": {
        "swagger": {
          "matchCondition": {
            "methods": [ "GET" ],
            "route": "/"
          },
          "responseOverrides": {
            "response.statusCode": "302",
            "response.headers.Location": "https://myapi.azurewebsites.net/swagger/ui"
          }
        }
      }
    }
    

    这两种方法都可以正常工作,但只能在本地主机或 Azure 上使用。我无法让单个代理在两种环境下工作。

    要让它在 Azure 上工作,我必须使用https://myapi.azurewebsites.net/swagger/ui,要让它们在本地主机上工作,我必须使用http://localhost:7071/swagger/ui

    所以问题是:如何创建一个可在代理中使用的 URL,该 URL 将在本地主机(开发时)和 azure(部署时)上工作

【问题讨论】:

    标签: azure-functions swagger-ui


    【解决方案1】:

    检查我的理解和以下发现是否有帮助:

    这两种方法都可以正常工作,但只能在本地主机或 Azure 上使用。我无法让一个代理在两种环境下工作。

    • 它在本地主机中运行良好,关键字/swagger/ui作为函数项目本地基本 URL 的后缀,即使 PROXY_DISABLE_LOCAL_CALL 设置为 true,但在 Azure 中不起作用。
    • 它没有用 Swagger UI 替换默认页面。
    • 如果是这种情况,我发现了一个 SO 问题 #71059606,其中用户要求替换 Azure Functions 站点基本 URL 的默认主页,并且通过配置设置 "AzureWebJobsDisableHomepage": "true" 解决了这个问题,禁用了本地和 Azure 云中 Azure Function App 的默认登录主页。
    • 此外,与swagger/ui 相关的响应应该在该 Http 触发器函数的正文/标头中配置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-05
      • 2019-05-17
      相关资源
      最近更新 更多