将 .NET 6 API 项目发布到 Azure API 管理服务时收到上述错误消息。
经过分析,我了解到问题的原因是,在“Program.cs”中配置服务(用于 DI)时,我们尝试获取环境变量,该变量返回 null 并引发异常。不知何故,这会阻止创建 swagger.json 文件。
我想了解的两件事是,
使用“Environment.GetEnvironmentVariable()”获取环境变量并不是获取“Program.cs”中的值,但在控制器操作方法中也是如此。
如果我注释掉与 swagger 相关的所有内容,则不会出现此问题。
在发布窗口的“服务依赖项”下,我已配置 APIM 资源详细信息以直接部署/更新 APIM 中的 API。
下面是复制该问题的示例代码屏幕截图。
请分享您的想法。
谢谢!
最初,即使我使用给定的代码也遇到了相同的错误。
问题在于获取环境变量。
要从 Azure 应用程序设置中获取键值(环境变量),请使用以下代码行。
var key1 = app.Configuration.GetValue<String>("KEY");
我的Azure应用程序设置:
将
app.UseSwaggerUI
更改为
app.UseSwaggerUI(options =>
{
options.SwaggerEndpoint("/swagger/v1/swagger.json", "v1");
options.RoutePrefix = string.Empty;
});
我的程序.cs
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (string.IsNullOrEmpty(app.Configuration.GetValue<String>("KEY")))
throw new Exception("Error");
app.UseSwagger();
app.UseSwaggerUI(options =>
{
options.SwaggerEndpoint("/swagger/v1/swagger.json", "v1");
options.RoutePrefix = string.Empty;
});
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
我的appsettings.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"KEY": "Your Connection String"
}
确保您已安装
Swashbuckle.AspNetCore
最新软件包。
.csproj 文件
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
输出: