“.net Core 托管”Blazor WASM 解决方案 Web API 项目上的 Swagger UI

问题描述 投票:0回答:2

我在 Blazor WebAssembly 解决方案上使用“.net Core 托管”选项。

这将为您创建一个 .net Core Web API 项目,作为解决方案的一部分。

如果我自己创建它并启动该项目,它将启动 API 的 Swagger UI 界面。如果我在“.net Core 托管”Blazor 应用程序中启动服务器项目,它将启动客户端应用程序(如预期)。

如何获取 Web API 服务器应用程序的 Swagger UI? (用于测试 API)。

我在谷歌上找不到任何关于此的信息 - 这个链接没有帮助: 我可以使用 Swashbuckle 从 Blazor 项目 c# 生成 Swagger UI吗

谢谢。

blazor blazor-webassembly
2个回答
4
投票

启动 Blazor 应用程序时,手动转到 /swagger/index.html,您将看到标准 Swagger UI。

如果您希望在运行应用程序时显示 SwaggerUI,而不是 Blazor 客户端,请编辑 launchSettings.json 并将启动配置文件的“launchUrl”值设置为 /swagger/index.html

如果您想在 MainLayout.razor 中添加指向它的链接,并确保该链接仅显示在开发环境中。

编辑:您需要确保在服务器上的program.cs 文件中设置了Swagger。 (假设Asp.NET Core 6,如果使用5,你的Startup.cs文件中应该有类似的初始化代码)

var builder = WebApplication.CreateBuilder(args);
...
builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "MyBlazor", Version = "v1" });
});
...
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
    app.UseWebAssemblyDebugging();
    app.UseSwagger();
    app.UseSwaggerUI(c => 
         c.SwaggerEndpoint("/swagger/v1/swagger.json", "MyBlazor v1"));
}

0
投票

我使用以下结构使其与 .NET 8 一起工作 - Visual Studio project structure

这是我的 Program.cs。请注意,我们不再需要使用 Startup 类。 blazor 和 swagger 都可以在 Program.cs 中初始化和设置。

using BlazorApp.Components;

使用 BlazorApp.Data; 使用 BlazorApp.Models;

命名空间 BlazorApp { 公开课节目 { 公共静态无效主要(字符串[]参数) { var builder = WebApplication.CreateBuilder(args);

        builder.Services.AddServerSideBlazor();
        builder.Services.AddHttpContextAccessor();
        builder.Services.AddResponseCaching();
        builder.Services.AddResponseCompression();

        // Add Raozr services to the container.
        builder.Services.AddRazorComponents()
            .AddInteractiveServerComponents()
            .AddInteractiveWebAssemblyComponents();

        // Database Contexts
        builder.Services.AddDbContextFactory<LendingContext>();
        builder.Services.AddDbContextFactory<ReportCenterContext>();

        // Services
        builder.Services.AddSingleton<PortfolioService>();
        builder.Services.AddSingleton<ReportService>();
        builder.Services.AddSingleton<CollateralService>();

        builder.Services.AddQuickGridEntityFrameworkAdapter();

        // Swagger
        builder.Services.AddEndpointsApiExplorer();
        builder.Services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo
            {
                Title = "API",
                Version = "v1",
            });
        });

        builder.Services.AddRazorPages();
        // Add Controllers
        builder.Services.AddControllers();
        builder.Services.AddControllersWithViews();

        var app = builder.Build();

        // Configure the HTTP request pipeline.
        if (app.Environment.IsDevelopment())
        {
            app.UseWebAssemblyDebugging();
            app.UseDeveloperExceptionPage();
        }

        else
        {
            app.UseExceptionHandler("/Error", createScopeForErrors: true);
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }

        app.UseSwagger();
        app.UseSwaggerUI();

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        //app.UseAntiforgery();

        app.MapRazorComponents<App>()
            .AddInteractiveServerRenderMode()
            .AddInteractiveWebAssemblyRenderMode()
            .AddAdditionalAssemblies(typeof(Client._Imports).Assembly);

        // Configure the HTTP request pipeline.
        app.UseRouting();

        app.UseAntiforgery();
        app.MapControllers();

        app.MapRazorPages();
        app.MapDefaultControllerRoute();

        app.Run();
    }
}

}

© www.soinside.com 2019 - 2024. All rights reserved.