Azure Functions:为根 URL 提供内容

Saq*_*qib 11 azure-functions

我有一个 C# Azure Function 项目,具有多种功能。

其中一项功能是提供一些 HTML 内容。目前可以在/api/home 访问该功能。但是,我希望针对根/URL 触发它。

我在我的项目中添加了一个 proxies.json 文件:

{
  "Home": {
    "matchCondition": {
      "methods": ["GET"],
      "route": "/"
    },
    "backendUri": "https://localhost:7071/api/home"
  }
}
Run Code Online (Sandbox Code Playgroud)

但这仍然没有效果 - 它继续提供默认的 Azure Fucntions 网页。

有什么办法可以做到这一点吗?

bre*_*edd 6

Azure Functions V4 的更好解决方案。

\n

tl;dr原来你可以将函数路由设置为“/”。您只需要正确的设置。

\n

正如其他人所指出的,代理在 v4 中被禁用。然后又添加回来,但它们仍然被弃用。Microsoft 建议使用 Azure API 管理,但这对于这个用例来说太复杂了。

\n

这个与 V3 向后兼容的解决方案是我从Julian H\xc3\xbcppauff 的一篇优秀博客文章中获得的。

\n

首先,(这对我来说是缺失的部分)您必须关闭默认的 Azure Functions 主页。您可以在应用程序设置中执行此操作。您必须设置AzureWebJobsDisableHomepagetrue. 在 Azure 主机上,您可以在Azure Functions 应用程序设置中执行此操作。

\n

在本地计算机上,为了进行测试,您可以像这样添加设置local.settings.json

\n
{\n  "IsEncrypted": false,\n  "Values": {\n    "AzureWebJobsDisableHomepage": "true"\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

接下来,正如 @Gangula 提到的,您关闭函数的默认“/api”前缀。添加routePrefix到您的host.json如下:

\n
{\n  "version": "2.0",\n  "extensions": {\n    "http": {\n      "routePrefix": ""\n    }\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

最后,创建一个函数Route = "/"。您可以在该函数中执行任何您想要的操作 - 提供默认文本、301 重定向到不同的 url 等。

\n

我希望这可以帮助人们在 V4 后解决这个问题!

\n


Fra*_*age 4

恐怕你不能使用根路径来访问这个功能,因为https://localhost:7071/始终是Azure函数的默认页面:

\n

在此输入图像描述

\n

下面是我的验证步骤,我将函数的路径改为https://localhost:7071/,但仍然显示默认页面Azure function app

\n

默认情况下,您的 azure 函数的路由是localhost:7071/api/{functionName}

\n

现在你一定已经注意到,几乎所有的功能路由都包含/api/在路由中。如果您想更改它,您可以使用以下命令修改内容来更改它host.json.

\n

你需要添加"extensions": { "http": { "routePrefix": "" } }在 host.json 中添加:

\n
{\n  "version": "2.0",\n  "logging": {\n    "applicationInsights": {\n      "samplingSettings": {\n        "isEnabled": true,\n        "excludedTypes": "Request"\n      }\n    }\n  },\n  "extensions": { "http": { "routePrefix": "" } }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

现在,您的路线可能如下所示:

\n
localhost:7071/{functionName}\n
Run Code Online (Sandbox Code Playgroud)\n

您还需要将Route代码中的设置为""

\n
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "")] HttpRequest req,\n
Run Code Online (Sandbox Code Playgroud)\n

在此输入图像描述

\n

当前路由应该满足您的要求\xef\xbc\x9a

\n

在此输入图像描述

\n

但是用这个路径访问这个函数还是失败,所以我认为将Azure函数的路径设置为根路径是无效的,不能用它来访问你的Azure函数。

\n

如果部署到Azure portal,可以尝试添加"AzureWebJobsDisableHomepage ": true禁用app settingsAzure主页的功能。我在本地测试了一下,好像不行。Azure portal似乎有效。

\n

  • 虽然我来晚了,但还是在这里补充一下。将路由设置为“/”似乎可以解决它。这样你就可以为网站的路由设置一个函数。但是,它在控制台“http://localhost:7071//”中显示不正确,但“http://localhost:7071/”工作得很好 (3认同)