swagger - 调试 Swashbuckle 错误 - 无法加载 API 定义
问题描述
有什么方法可以获取 Swashbuckle/Swagger 错误的堆栈跟踪或内部异常?在某些时候,它停止了工作。我不确定是不是在我从 .Net Core 2.0 升级到 2.1 时,但我很确定它在那之后仍然可以工作。当我导航到 myapidomain/swagger/index.html 时,我收到此错误:
这不是很有帮助。大约两周前它还在工作……我没有更改任何 Swagger 配置。和以前一样:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Info
{
Version = "v1",
Title = "My.API",
Description = "Test"
});
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
app.UseDeveloperExceptionPage();
else
app.UseHsts();
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "PropWorx API V1");
});
...
}
我在 ASP.Net Core 2.1 Web API 上使用 Swashbuckle.AspNetCore 3.0.0。
解决方案
同意 UI 调试并不是真的有用,但是可以通过打开浏览器的调试工具(例如 Chrome 上的 F12),刷新/swagger
端点,然后检查swagger.json
有效负载来抓取完整的异常跟踪 - 这是一个 XHR 请求,它将失败并显示500
状态码。
(我建议在一个大项目上为链接添加书签,以便将来您可以直接转到 json 文件,例如https://MyHost/swagger/v1/swagger.json
)
例如,在下面的人为错误中,我在两种方法之间复制了相同的路线:
[HttpGet]
[Route("parseenum")]
public ActionResult CheckEnum([FromQuery] MyEnum someEnum)
...
[HttpGet]
[Route("parseenum")]
public ActionResult CheckEnum2([FromQuery] MyEnum someEnum)
...
这会产生错误:
您现在应该能够追踪和修复它。
推荐阅读
- sql-server - 如何使主键成为另一个表中的主键和 Microsoft SQL Server 中的 2 个字母的组合
- node.js - 打字稿编译错误 - TS2769:没有重载匹配此调用
- php - 在 PHP 中的控制器中包含模型函数
- r - 如果记录与其他数据框重复,则改变数据框
- python - JSON查询:python中的日期时间验证
- excel - Google Apps 脚本 - 将 xlsx 转换为覆盖现有文件的表格
- python-3.x - 抓取网页上的特定表格,但每次都是空的
- git - 赫斯基钩子不在 Lerna monorepo 中运行
- c# - 如何自动更新 DataGridViewColumn?
- javascript - 使用 ASP.NET Razor 的 Ajax POST