如何在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
相关产品推荐
相关产品推荐

