You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6.0中Swashbuckle.AspNetCore生成空白Swagger页面求助

修复Swagger UI空白页面的可行方案

方案1:替换自定义Swagger UI索引页

直接使用官方标准的Swagger UI索引页,规避Swashbuckle自动生成脚本的语法问题:

  1. 在项目中创建wwwroot/swagger目录(若不存在),新增index.html文件。
  2. 复制官方Swagger UI基础HTML结构,手动配置swagger.json路径与UI参数,核心是将原JSON.parse转义字符串改为原生JS对象,避免换行解析错误:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Swagger UI</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swagger-ui-dist@5.9.0/swagger-ui.css" />
    <style>
        html { box-sizing: border-box; overflow: -moz-scrollbars-vertical; overflow-y: scroll; }
        *, *:before, *:after { box-sizing: inherit; }
        body { margin: 0; background: #fafafa; }
    </style>
</head>
<body>
    <div id="swagger-ui"></div>
    <script src="https://cdn.jsdelivr.net/npm/swagger-ui-dist@5.9.0/swagger-ui-bundle.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/swagger-ui-dist@5.9.0/swagger-ui-standalone-preset.js"></script>
    <script>
        const configObject = {
            urls: [{ url: "/MyWebAPI/swagger/v1/swagger.json", name: "MyApp v1" }],
            deepLinking: false,
            persistAuthorization: false,
            displayOperationId: false,
            defaultModelsExpandDepth: 1,
            defaultModelExpandDepth: 1,
            defaultModelRendering: "example",
            displayRequestDuration: false,
            docExpansion: "list",
            showExtensions: false,
            showCommonExtensions: false,
            supportedSubmitMethods: ["get","put","post","delete","options","head","patch","trace"],
            tryItOutEnabled: false
        };
        const oauthConfigObject = {
            scopeSeparator: " ",
            scopes: [],
            useBasicAuthenticationWithAccessCodeGrant: false,
            usePkceWithAuthorizationCodeGrant: false
        };

        // 保留原兼容代码
        configObject.urls.forEach(function (item) {
            if (item.url.startsWith("http") || item.url.startsWith("/")) return;
            item.url = window.location.href.replace("index.html", item.url).split('#')[0];
        });

        window.onload = function() {
            const ui = SwaggerUIBundle({
                ...configObject,
                dom_id: '#swagger-ui',
                presets: [
                    SwaggerUIBundle.presets.apis,
                    SwaggerUIStandalonePreset
                ],
                layout: "StandaloneLayout"
            });
            window.ui = ui;
        };
    </script>
</body>
</html>
  1. 确保静态文件中间件优先于Swagger中间件加载,保证索引页能正常访问。

方案2:调整Swashbuckle配置,强制生成正确脚本

在Program.cs/Startup.cs中配置Swagger UI时,指定JSON序列化规则,避免生成多行转义字符串:

app.UseSwaggerUI(options =>
{
    options.SwaggerEndpoint("/MyWebAPI/swagger/v1/swagger.json", "MyApp v1");
    options.RoutePrefix = "swagger";

    // 手动配置UI参数,禁用自动格式化
    options.ConfigObject = new SwaggerUIConfigObject
    {
        Urls = new List<UrlDescriptor> { new UrlDescriptor { Url = "/MyWebAPI/swagger/v1/swagger.json", Name = "MyApp v1" } },
        DeepLinking = false,
        PersistAuthorization = false,
        DisplayOperationId = false,
        DefaultModelsExpandDepth = 1,
        DefaultModelExpandDepth = 1,
        DefaultModelRendering = ModelRendering.Example,
        DisplayRequestDuration = false,
        DocExpansion = DocExpansion.List,
        ShowExtensions = false,
        ShowCommonExtensions = false,
        SupportedSubmitMethods = new[] { SubmitMethod.Get, SubmitMethod.Put, SubmitMethod.Post, SubmitMethod.Delete, SubmitMethod.Options, SubmitMethod.Head, SubmitMethod.Patch, SubmitMethod.Trace },
        TryItOutEnabled = false
    };

    // 配置序列化规则,生成紧凑无换行的JSON
    options.ConfigObjectSerializerSettings = new JsonSerializerSettings
    {
        Formatting = Formatting.None,
        StringEscapeHandling = StringEscapeHandling.EscapeHtml
    };
});

该配置会让Swashbuckle生成单一行的JSON字符串,避免浏览器解析时因多行拆分导致的语法错误。

方案3:检查静态文件中间件顺序

确保UseStaticFiles()在UseSwagger()和UseSwaggerUI()之前调用,否则Swagger UI依赖的CSS、JS静态资源无法加载,导致页面空白:

app.UseStaticFiles(); // 必须前置
app.UseSwagger();
app.UseSwaggerUI(...);

内容的提问来源于stack exchange,提问作者Piotrek B.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 01:20:19