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

如何在Swagger中禁用请求示例JSON格式化(.NET 8场景)

解决Swagger UI自动格式化JSON请求体的问题

方法1:通过自定义脚本拦截请求,强制使用紧凑格式

在.NET 8项目的Program.cs中,找到Swagger UI的配置代码,添加自定义脚本注入:

app.UseSwaggerUI(options =>
{
    // 保留你原有的Swagger配置(比如端点定义等)
    options.SwaggerEndpoint("/swagger/v1/swagger.json", "Your API V1");
    
    // 注入自定义脚本修改请求处理逻辑
    options.InjectJavascript("/swagger-custom.js");
});

然后在项目的wwwroot目录下创建swagger-custom.js文件,写入以下代码(替换/your-github-webhook-path为实际的Webhook端点路径):

window.addEventListener('load', () => {
    const originalFetch = window.fetch;
    window.fetch = (resource, options) => {
        // 只针对目标Webhook端点处理
        if (resource.includes('/your-github-webhook-path') && options?.method === 'POST' && options?.body) {
            let rawBody = options.body;
            // 处理Swagger UI包装的FormData或字符串格式请求体
            if (rawBody instanceof FormData) {
                const payload = rawBody.get('payload');
                if (payload) rawBody = JSON.stringify(JSON.parse(payload));
            } else if (typeof rawBody === 'string') {
                rawBody = JSON.stringify(JSON.parse(rawBody));
            }
            options.body = rawBody;
        }
        return originalFetch(resource, options);
    };
});

这段代码会拦截Swagger UI的请求,将请求体重新转为无缩进无换行的紧凑JSON格式,确保和swagger.json中定义的示例格式一致。

方法2:修改Swagger UI默认配置(兼容性稍弱)

如果不想额外创建脚本文件,也可以直接在配置中添加自定义逻辑:

app.UseSwaggerUI(options =>
{
    // 原有配置...
    
    // 禁用请求体的自动美化
    options.ConfigObject.AdditionalItems.Add("requestBodyTransformer", @"
        function(body) {
            if (typeof body === 'string') {
                return JSON.stringify(JSON.parse(body));
            }
            return body;
        }
    ");
});

额外验证提示

可以在Webhook端点中添加日志,记录接收到的原始请求体内容,对比GitHub实际发送的请求格式,确保Swagger UI发送的请求体完全匹配。也可以用Postman直接发送紧凑格式JSON测试签名验证逻辑,排除其他问题。


内容的提问来源于stack exchange,提问作者dhrm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:39:59