如何从路由中删除“api” - Azure Functions v3 -- host.json routePrefix 空字符串不起作用

Ray*_*ond 5 c# configuration dependency-injection azure-functions

我正在尝试删除 URL 中的“api”前缀。

这是我的 host.json。

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

注意:如果我更改“routePrefix”:“foo”,它就可以工作。看来 string.empty 导致了问题。

这是我的startup.cs代码:

public class Startup : FunctionsStartup
{
    public override void Configure(IFunctionsHostBuilder builder)
    {

        var serviceProvider = builder.Services.BuildServiceProvider();
        var existingConfig = serviceProvider.GetService<IConfiguration>(); 

        var config = new ConfigurationBuilder()
            .AddEnvironmentVariables()
            .AddConfiguration(existingConfig) 
            .Build();

        builder.Services.AddSingleton<IConfiguration>(configRoot);
        services.BuildServiceProvider(true);

    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,我已经将现有配置添加到构建器中,按照此处的文档:

https://github.com/Azure/azure-functions-host/issues/4363

https://github.com/Azure/azure-functions-durable-extension/issues/894

而且这个问题,别人也反映了和我一样的问题。但是票已经关闭了...

https://github.com/Azure/azure-functions-host/issues/5466

我还遗漏了什么或做错了什么?

旁白:如果我注释掉这一行,那么带有 api 的 URL 也可以工作。builder.Services.AddSingleton(configRoot);

Ray*_*ond 0

我的问题是这一行:

builder.Services.AddSingleton<IConfiguration>(configRoot);
Run Code Online (Sandbox Code Playgroud)

我们的项目中有这行代码,因为我们将 IConfiguration 直接传递给我们的类。然而,我们实际上并不需要它,因为我们现在使用 IOptions 来传递我们键入的配置设置。

仅供参考:这些是 nuget 包

在此输入图像描述