C# Azure函数(使用DI)无法删除/空气污染指数;路由前缀
所以我知道这两个问题似乎在问同样的问题: 然而,我仍然无法摆脱路由中的“api”前缀 我的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
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中的内容——这以后会把某人搞糊涂的:-)。我将研究是否有更好的方法添加另一个配置提供程序:-)祝贺您解决了这个问题。您可以稍后标记您的答案,这将帮助其他遇到类似问题的人。:)