Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Azure函数(使用DI)无法删除/空气污染指数;路由前缀_C#_Azure_Dependency Injection_Azure Functions - Fatal编程技术网

C# Azure函数(使用DI)无法删除/空气污染指数;路由前缀

C# Azure函数(使用DI)无法删除/空气污染指数;路由前缀,c#,azure,dependency-injection,azure-functions,C#,Azure,Dependency Injection,Azure Functions,所以我知道这两个问题似乎在问同样的问题: 然而,我仍然无法摆脱路由中的“api”前缀 我的host.json看起来像: { "version": "2.0", "extensions": { "http": { "routePrefix": "" } } } 在我的HttpTrigger上,我正在设置我的自定义路由: [HttpTrigger(AuthorizationLevel.Anonymous,“post”,Route=“myapp”)]Htt

所以我知道这两个问题似乎在问同样的问题:

然而,我仍然无法摆脱路由中的“api”前缀

我的
host.json
看起来像:

{
  "version": "2.0",
  "extensions": {
    "http": {
      "routePrefix": ""
    }
  }
}
在我的HttpTrigger上,我正在设置我的自定义路由:

[HttpTrigger(AuthorizationLevel.Anonymous,“post”,Route=“myapp”)]HttpRequest请求,
但是,当我在本地运行该应用程序时,终点如下:

[POST] http://localhost:7071/api/myapp
如果我将我的
host.json
更改为:

{
  "version": "2.0",
  "extensions": {
    "http": {
      "routePrefix": "something"
    }
  }
}
我的应用程序现在运行在:

[POST] http://localhost:7071/something/myapp
因此,给出一个空字符串
似乎不起作用。有什么想法吗?(我已经完成了所有常规工作:清洁溶液、删除bin/obj文件夹等)

供我使用的功能应用程序参考:


编辑:

我还从function应用程序中引用了这些包(尽管我不知道这会如何导致此问题):


编辑2

我已将问题缩小到在
Startup.cs
中调用的代码:

IConfiguration configuration=builder.Services.BuildServiceProvider().GetService();
IConfiguration combinedConfig=新配置生成器()
.AddConfiguration(配置)
.AddAzureKeyVault(kvEndpoint、kvClient、新的DefaultKeyVault secretManager());
.Build();
builder.Services.AddSingleton(combinedConfig);

//我试过了,它成功了

我使用了VS2019,创建了带有HTTP触发器的Azure函数默认项目,并从
host.json

项目文件

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <AzureFunctionsVersion>v2</AzureFunctionsVersion>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.31" />
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
</Project>
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <AzureFunctionsVersion>v2</AzureFunctionsVersion>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.2.5" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Core" Version="3.0.16" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Http" Version="3.0.2" />
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.7" />
    <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
</Project>

netcoreapp2.1

项目文件

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <AzureFunctionsVersion>v2</AzureFunctionsVersion>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.31" />
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
</Project>
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <AzureFunctionsVersion>v2</AzureFunctionsVersion>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.2.5" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Core" Version="3.0.16" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Http" Version="3.0.2" />
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.7" />
    <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
</Project>

netcoreapp2.1
v2
保存最新
保存最新
从未

所以我犯的错误似乎很小。在以下代码中:

IConfiguration configuration=builder.Services.BuildServiceProvider().GetService();
IConfiguration combinedConfig=新配置生成器()
.AddConfiguration(配置)
.AddAzureKeyVault(kvEndpoint、kvClient、新的DefaultKeyVault secretManager());
.Build();
builder.Services.AddSingleton(combinedConfig);
ConfigurationBuild.Build()
实际上返回一个
IConfigurationRoot
,而不是
IConfiguration
IConfigurationRoot
IConfiguration
的超集)。因此,当注册它时,我丢失了一些东西(可能是配置提供程序信息)

简单更改:

IConfiguration combinedConfig

修复了这个问题(或者您可以使用
var
,我可能应该这样做!)


虽然这解决了问题,但我仍然有点困惑,为什么在将
host.json
中的
routePrefix
更改为一些非空字符串之前可以工作,而将其设置为空字符串则不行。如果在
host.json
中设置,就会应用该值,如果没有设置,就意味着恢复到默认的
“api”

azure函数中是否有类似Startup类的内容?@IvanYang yes。我也在使用:
Microsoft.Azure.Functions.Extensions
包。这可能是相关的吗???)您好,您能给我们看一下所有的软件包和示例代码吗?您是否通过在项目中添加
Startup.cs
来使用一些DI?这应该可以用,我们已经用过很多次了。@bytedev,尝试在Startup.cs:
builder.Services.Configure(options=>options.RoutePrefix=string.Empty)中添加这行代码@IvanYang确实有效。然而,我们只是用它覆盖了host.json中的内容——这以后会把某人搞糊涂的:-)。我将研究是否有更好的方法添加另一个配置提供程序:-)祝贺您解决了这个问题。您可以稍后标记您的答案,这将帮助其他遇到类似问题的人。:)