调试 Swashbuckle 错误 - 无法加载 API 定义
Debugging Swashbuckle Error - Failed to load API Definition
有什么方法可以获取有关 Swashbuckle/Swagger 错误的堆栈跟踪或内部异常?在某个时候,它停止了工作。我不确定是不是我从 .Net Core 2.0 升级到 2.1 时发生的,但我很确定在那之后它仍然在工作。当我导航到 myapidomain/swagger/index.html 时出现此错误:
这不是很有帮助。它在大约 2 周前工作......我没有更改任何 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
状态代码。
(我建议您在大型项目中为 link 添加书签,这样以后您就可以直接转到 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)
...
产生错误:
您现在应该能够找到并修复它。
我今天遇到了这个问题并尝试了很多来解决它,你应该像这段代码一样在 C# 控制器代码中删除 [http] 标记之前的所有 [Route]
例如:
[Route("~/api/getAll")]
[HttpGet]
public ActionResult<List<asteriksModel>>GetAll()
{
return _context.asterList.ToList();
}
你的路由代码必须是这样的
[HttpGet]
public ActionResult<List<asteriksModel>>GetAll()
{
return _context.asterList.ToList();
}
在我的项目中它运行良好
如果您的 api 有相同的两个或更多 [HttpGet]
它不会招摇。
您应该指定 [HttpGet] , [HttpGet ("{id}")]
[HttpGet]
`[HttpGet ("{id}")]`
我发现 SwaggerFunctions 需要通过 Anonymous 才能完成 Swagger/UI。
public static class SwaggerFunctions
{
[SwaggerIgnore]
[FunctionName("Swagger")]
public static Task<HttpResponseMessage> Swagger(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "swagger/json")]
HttpRequestMessage req,
[SwashBuckleClient] ISwashBuckleClient swashBuckleClient)
{
return Task.FromResult(swashBuckleClient.CreateSwaggerDocumentResponse(req));
}
[SwaggerIgnore]
[FunctionName("SwaggerUi")]
public static Task<HttpResponseMessage> SwaggerUi(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "swagger/ui")]
HttpRequestMessage req,
[SwashBuckleClient] ISwashBuckleClient swashBuckleClient)
{
return Task.FromResult(swashBuckleClient.CreateSwaggerUIResponse(req, "swagger/json"));
}
}
有什么方法可以获取有关 Swashbuckle/Swagger 错误的堆栈跟踪或内部异常?在某个时候,它停止了工作。我不确定是不是我从 .Net Core 2.0 升级到 2.1 时发生的,但我很确定在那之后它仍然在工作。当我导航到 myapidomain/swagger/index.html 时出现此错误:
这不是很有帮助。它在大约 2 周前工作......我没有更改任何 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
状态代码。
(我建议您在大型项目中为 link 添加书签,这样以后您就可以直接转到 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)
...
产生错误:
您现在应该能够找到并修复它。
我今天遇到了这个问题并尝试了很多来解决它,你应该像这段代码一样在 C# 控制器代码中删除 [http] 标记之前的所有 [Route] 例如:
[Route("~/api/getAll")]
[HttpGet]
public ActionResult<List<asteriksModel>>GetAll()
{
return _context.asterList.ToList();
}
你的路由代码必须是这样的
[HttpGet]
public ActionResult<List<asteriksModel>>GetAll()
{
return _context.asterList.ToList();
}
在我的项目中它运行良好
如果您的 api 有相同的两个或更多 [HttpGet]
它不会招摇。
您应该指定 [HttpGet] , [HttpGet ("{id}")]
[HttpGet]
`[HttpGet ("{id}")]`
我发现 SwaggerFunctions 需要通过 Anonymous 才能完成 Swagger/UI。
public static class SwaggerFunctions
{
[SwaggerIgnore]
[FunctionName("Swagger")]
public static Task<HttpResponseMessage> Swagger(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "swagger/json")]
HttpRequestMessage req,
[SwashBuckleClient] ISwashBuckleClient swashBuckleClient)
{
return Task.FromResult(swashBuckleClient.CreateSwaggerDocumentResponse(req));
}
[SwaggerIgnore]
[FunctionName("SwaggerUi")]
public static Task<HttpResponseMessage> SwaggerUi(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "swagger/ui")]
HttpRequestMessage req,
[SwashBuckleClient] ISwashBuckleClient swashBuckleClient)
{
return Task.FromResult(swashBuckleClient.CreateSwaggerUIResponse(req, "swagger/json"));
}
}