- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在尝试从 VS 2022 将应用服务部署到 Azure 时遇到问题。每次收到此错误时:
我使用 .NET 6 作为我的目标框架,并且我已将 Swashbuckle.AspNetCore 包更新到最新版本。应用服务发布成功,但更新API时出现错误。
在我的项目版本中,没有 Startup.cs,而是 Program.cs,我实现 Swagger 生成的方式是:
builder.Services.AddSwaggerGen();
var app = builder.Build();
app.UseSwagger();
app.UseSwaggerUI();
我浏览过类似的帖子,并根据它们我可以补充一点,我也没有获取任何环境变量。
我也尝试过像这样使用 UseSwaggerUI()
但我还是得到了同样的错误:
app.UseSwaggerUI(options =>
{
options.SwaggerEndpoint("/swagger/v1/swagger.json", "v1");
options.RoutePrefix = string.Empty;
});
奇怪的是,部署对我的同事有效,对我也有效,直到上周,当 Program.cs 中的任何内容都没有更改时,它停止了。
我的程序.cs:
var builder = WebApplication.CreateBuilder(args);
var azureKeyVaultUrl = builder.Configuration[AppConfigurationConst.AzureKeyVaultUrl];
var logAnalyticsWorkspaceId = AzureKeyVaultHelper.GetAzureKeyVault(azureKeyVaultUrl, AppConfigurationConst.LogAnalyticsWorkspaceId);
var logAnaliticsAuthenticationId = AzureKeyVaultHelper.GetAzureKeyVault(azureKeyVaultUrl, AppConfigurationConst.LogAnaliticsAuthenticationId);
var CrmConnectionString = AzureKeyVaultHelper.GetAzureKeyVault(azureKeyVaultUrl, AppConfigurationConst.OneCrmConnectionString);
var logger = new LoggerConfiguration()
.WriteTo.AzureAnalytics(logAnalyticsWorkspaceId, logAnaliticsAuthenticationId)
.Enrich.FromLogContext()
.CreateLogger();
var serviceClient = new ServiceClient(CrmConnectionString);
builder.Logging.AddSerilog(logger);
logger.Information("Start ALGOI App Service");
builder.Services.AddControllers().AddNewtonsoftJson();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddSingleton<IAuthenticationService, AuthenticationService>();
builder.Services.AddSingleton<IWebClientService, WebClientService>();
builder.Services.AddScoped<ICreateSessionService, CreateSessionService>();
builder.Services.AddScoped<ICreateFolderService, CreateFolderService>();
builder.Services.AddScoped<IDeleteFolderService, DeleteFolderService>();
builder.Services.AddScoped<IVerifyFolderService, VerifyFolderService>();
builder.Services.AddScoped<IUndoFolderService, UndoFolderService>();
builder.Services.AddSingleton(serviceClient);
builder.Services.AddApplicationInsightsTelemetry(builder.Configuration["APPLICATIONINSIGHTS_CONNECTION_STRING"]);
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
还有我的 .csproj:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UserSecretsId>{usersecretsid}</UserSecretsId>
<GenerateRuntimeConfigurationFiles>True</GenerateRuntimeConfigurationFiles>
</PropertyGroup>
<ItemGroup>
<Compile Remove="Connected Services\**" />
<Content Remove="Connected Services\**" />
<EmbeddedResource Remove="Connected Services\**" />
<None Remove="Connected Services\**" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="FluentAssertions" Version="6.7.0" />
<PackageReference Include="JsonSubTypes" Version="1.9.0" />
<PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.15.0" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.6" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="6.0.6" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.7" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.6">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Graph" Version="4.34.0" />
<PackageReference Include="Microsoft.Identity.Client" Version="4.48.1" />
<PackageReference Include="Microsoft.Identity.Web" Version="1.16.0" />
<PackageReference Include="Microsoft.Identity.Web.MicrosoftGraph" Version="1.16.0" />
<PackageReference Include="Microsoft.PowerPlatform.Dataverse.Client" Version="1.0.9" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.0.6" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="Polly" Version="7.2.3" />
<PackageReference Include="RestSharp" Version="106.13.0" />
<PackageReference Include="Serilog" Version="2.11.0" />
<PackageReference Include="Serilog.Extensions.Hosting" Version="5.0.0" />
<PackageReference Include="Serilog.Extensions.Logging" Version="3.1.0" />
<PackageReference Include="Serilog.Sinks.AzureAnalytics" Version="4.8.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
<PackageReference Include="System.Net.Http" Version="4.3.4" />
<PackageReference Include="TypeSafe.Http.Net.HttpClient" Version="2.2.16" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="someprojectpath" />
<ProjectReference Include="someprojectpath" />
<ProjectReference Include="someprojectpath" />
</ItemGroup>
<ItemGroup>
<Content Update="local.settings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="appsettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
</Project>
appsettings.json:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "domain",
"TenantId": "tenantid",
"ClientId": "clientid",
"Scopes": "access_as_user",
"CallbackPath": "/signin-oidc",
"ClientSecret": "Client secret from app-registration. Check user secrets/azure portal.",
"ClientCertificates": []
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AzureKeyVaultUrl": "keyvaulturl",
"AllowedHosts": "*",
"MicrosoftGraph": {
"BaseUrl": "https://graph.microsoft.com/v1.0",
"Scopes": "user.read"
},
"ApplicationInsights": {
"ConnectionString": "appinsightsconnectionstring"
}
}
编辑:我发现错误的原因是这些行:
var azureKeyVaultUrl = builder.Configuration[AppConfigurationConst.AzureKeyVaultUrl];
var logAnalyticsWorkspaceId = AzureKeyVaultHelper.GetAzureKeyVault(azureKeyVaultUrl, AppConfigurationConst.LogAnalyticsWorkspaceId);
var logAnaliticsAuthenticationId = AzureKeyVaultHelper.GetAzureKeyVault(azureKeyVaultUrl, AppConfigurationConst.LogAnaliticsAuthenticationId);
var CrmConnectionString = AzureKeyVaultHelper.GetAzureKeyVault(azureKeyVaultUrl, AppConfigurationConst.OneCrmConnectionString);
此后我将它们更改为直接从配置而不是 keyvault 获取值:
var azureKeyVaultUrl = builder.Configuration.GetValue<string>(AppConfigurationConst.AzureKeyVaultUrl);
var logAnalyticsWorkspaceId = builder.Configuration.GetValue<string>(AppConfigurationConst.LogAnalyticsWorkspaceId);
var logAnaliticsAuthenticationId = builder.Configuration.GetValue<string>(AppConfigurationConst.LogAnaliticsAuthenticationId);
var CrmConnectionString = builder.Configuration.GetValue<string>(AppConfigurationConst.OneCrmConnectionString);
在本地运行时,它会正确获取值并将它们分配给变量。但似乎在部署时遇到了问题。在 var serviceClient = new ServiceClient(CrmConnectionString);
行中,当我将变量更改为静态字符串时,它可以正常工作,但是当使用该变量时,会弹出startup.cs错误(仅在部署时)。与使用日志 analitycs 值初始化记录器相同。同样,本地运行没有问题,只是部署崩溃了。
最佳答案
我创建了一个示例 ASP.NET Core 6.0 Web API
,并且能够将应用程序部署到 Azure 应用服务
,不会出现任何错误。
一般来说,当代码中有任何错误或配置问题时,就会发生此类错误。
In my version of the project there is no Startup.cs but Program.cs
.Net6 Core
文件夹结构:
是的,我们需要在Program.cs
本身中配置
与Swagger
相关的代码。
检查以下步骤并确保您按照相同的步骤进行部署,没有任何问题。
选择 ASP.NET Core Web API
模板。
选择启用 openAPI 支持
。
我的.csproj
文件:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" />
</ItemGroup>
</Project>
我的 Program.cs
文件:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
else
{
app.UseSwagger();
app.UseSwaggerUI(options =>
{
options.SwaggerEndpoint("/swagger/v1/swagger.json", "v1");
options.RoutePrefix = string.Empty;
});
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
部署的 Azure 应用服务的输出:
关于c# - Azure API 部署问题 - Swashbuckle SwaggenGen 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75297594/
我将 Swashbuckle.AspNetCore NuGet 添加到我的项目中,它似乎运行良好。 (我得到 Swagger 页面就好了。) 但是当我处理另一个问题(不使用 Swagger 页面)时,
.Netcore 2.2虚张声势 4.0.1 Swagger UI 在本地主机上运行,但在部署到 Azure ASE 到由应用程序网关管理的站点后,Swagger 将不会加载。 (已确认生成 sw
这是我的理解: Swagger 是一种编写文档的符号/规则。但为什么它被称为框架(如 Angular/MVC)? Swashbuckle 是一个生成文档(基于 Swagger 规则)的程序(JavaS
使用 ABP 框架 (3.3) 和 ASP.NET Core (3.1)。 在编译应用程序后,我尝试使用 Swashbuckle.AspNetCore.Cli ( https://github.com
如何在 Swashbuckle 6.0.0 的选项中禁用 Swagger Schema 验证器。我知道它在本地运行时默认关闭,但没有看到 SwaggerUI() 的 validatorURL 选项 最
我在隐藏调用时遇到 Swashbuckle 问题,链接到调用的模型定义保留在生成的 JSON 中的定义中。 使用文档过滤器,我可以从界面中删除调用。 调用保留在生成的 JSON 中,但在 Swagge
我使用 Swashbuckle 将 Swagger 文档添加到我的 ASP.NET Web API 项目中。如何在不注入(inject) CSS 的情况下从文档页面隐藏默认标题(带有 swagger
在 Swashbuckle 中,有一个名为 OrderActionGroupsBy 的设置,它应该更改 API 内的排序,但我所做的一切都不起作用,而且我无法确定这是否是 Swashbuckle 问题
我的应用程序是一个 ASP.NET Core 1.0 Web API。 我有以下 Controller : [HttpGet("{someData:MinLength(5):MaxLength
我正在尝试为 swashbuckle 注册自定义路由。但是我想不通。 我需要做的是为当前路由添加一个扩展。 举个例子:我需要将它设置为 swagger.aspx/ui 而不是 swagger/ui .
我有一个包含 90 多个表的数据库,这些表都通过外键相互交叉链接。 当我打开我的 API 的 swagger 页面时,加载需要 2 多分钟。原因似乎是它正在为每个 API 生成 Model 和 Exa
我正在使用 Swashbuckle v3.0。 我不确定这是否是一个错误,但多态性并没有像它应该的那样工作。我有以下类(class): BasePersonDocumentDto { Id,
在 ASP.NET Core webapp 中使用 Swashbuckle.AspNetCore,我们有如下响应类型: public class DateRange { [JsonConver
我正在使用 SwaggerResponse 属性来装饰我的 api Controller 操作,这一切工作正常,但是当我查看生成的文档时,参数的描述字段是空的。 是否有基于属性的方法来描述操作参数(而
我有一个 C# 对象 public class MyObject { public int property1 { get; set; } public string property2 { ge
我应该如何在 .net 核心中设置 swashbuckle 以便我可以从请求正文上传文件(多部分,表单值模型绑定(bind)已禁用)? 我尝试了什么(显然在 swashbuckle 启动配置中添加了
我从 Swashbuckle 开始,我使用 Swashbuckle 在 .NET Core 中创建了一个 Web API。 我需要在 IIS 站点的子应用程序中部署我的 API IIS 基础设施 II
是否可以在 asp.net Core 2.0 Web API 上的 Swashbuckle UI 上设置默认选中的身份验证范围复选框? 我使用“openid”范围,我希望每次都检查它。 谢谢你。 最佳
我们在代码中使用 JetBrains 注释来定义对象模型的可空性行为。默认情况下,我无法在使用 Swashbuckle.AspNetCore v5.0.0-rc5 实现的 Swagger UI 中看到
我们在代码中使用 JetBrains 注释来定义对象模型的可空性行为。默认情况下,我无法在使用 Swashbuckle.AspNetCore v5.0.0-rc5 实现的 Swagger UI 中看到
我是一名优秀的程序员,十分优秀!