.NET 6迁移后ServiceStack 5.13.0的metadata与swagger-ui返回500错误
问题根因
从异常堆栈可直接定位,报错来源于Visual Studio配套的Browser Link(浏览器链接)和.NET热重载中间件,和ServiceStack本身无直接关联。
该异常仅触发于返回text/html类型的请求:/metadata、/swagger-ui均为HTML页面,会被上述中间件拦截注入脚本;其余业务接口返回JSON/XML格式响应,不会被拦截所以访问正常。
解决方案
快速验证方案
- 不通过Visual Studio启动,直接在项目目录执行命令
dotnet run启动服务,再次访问两个页面验证是否恢复正常。 - 若仍使用VS启动,点击顶部工具栏「热重载」按钮旁的下拉箭头,取消勾选「热重载在浏览器加载时启用」,同时关闭「浏览器链接」功能后重启项目即可。
永久修复方案
- 调整Program.cs的中间件注册顺序,将系统内置中间件放在ServiceStack注册之前:
var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); // 先注册系统内置中间件 if (!app.Environment.IsDevelopment()) { app.UseHsts(); app.UseHttpsRedirection(); } // 再注册ServiceStack app.UseServiceStack(new AppHost(builder.Configuration["Environment"])); app.Run();
- 若调整顺序后仍报错,可在
Properties/launchSettings.json对应启动配置的environmentVariables节点添加配置,显式禁用浏览器刷新中间件:
"ASPNETCORE_BROWSER_REFRESH": "false"
验证方法
访问/metadata/json路径,若能正常返回JSON格式的元数据内容,说明ServiceStack的元数据能力完全正常,问题完全出在前端页面的中间件拦截逻辑。
内容的提问来源于stack exchange,提问作者Codehack
相关产品推荐
相关产品推荐

