【问题标题】:How to debug error 500 in Swashbuckle 5 for ASP.Net如何在 Swashbuckle 5 for ASP.Net 中调试错误 500
【发布时间】:2020-03-16 07:06:55
【问题描述】:

我从 Swashbuckle/Swagger 收到错误 500,与 best related answer I could find 相反,我在错误响应中没有看到任何其他信息。

我通过反复试验注释掉控制器和操作来手动跟踪问题端点,直到我隔离了坏的端点,但这很慢并且不能告诉我为什么某些端点有问题。我该怎么做才能为 Swagger/Swashbuckle 错误获取有意义的调试信息?

我在 ASP.Net 4.6.2 WebApi 应用程序中使用 Swashbuckle 5.6.0 和 Swashbuckle.Core 5.6.0。唯一的配置在 SwaggerConfig.cs 文件中,如下所示..

public class SwaggerConfig
{
    public static void Register()
    {
        GlobalConfiguration.Configuration
            .EnableSwagger(c =>
                {
                    c.SingleApiVersion("v1", "My.Namespace.Here.WebApi");
                })
            .EnableSwaggerUi(c =>
                {
                });
    }
}

swagger/docs/v1 返回 500 响应,其中包含以下内容:

【问题讨论】:

  • 听起来您需要在端点上进行集成测试
  • @AndreiDragotoniu 端点功能正常,但导致 Swagger 出错。当 Swagger 开始显示错误时,它被认为比继续开发的优先级低,因此现在存在大量 Swagger 特定的不兼容问题。了解 Swagger 认为 的错误是至关重要的。
  • 如果你到swagger/docs/v1看到什么
  • 这很奇怪,你能把你发现的坏人的样本贴出来
  • @nbrosz 没有人可以用给出的细节重现您的问题,根据我的经验,当出现错误时,它们会显示在正文中

标签: asp.net asp.net-web-api swagger swagger-ui swashbuckle


【解决方案1】:

问题在于您的URL 请求。将HTTPS 更改为HTTP

http://localhost:xxxx/...

您无法在本地模拟 HTTPS,因为您的本地计算机中不存在 SSL certificate

更新

最近当 RAM 饱和并且没有足够的可用内存时,我遇到了状态 500

【讨论】:

  • 不幸的是,这并没有什么不同。我尝试在 http://... 上点击相同的 URL,我得到了相同的结果。
【解决方案2】:

通常,我使用 Chrome 开发工具 来调试这种错误。此外,如果您使用的是 Windows 操作系统,您还可以获得关于 Event Viewer 的更多信息。另一种选择是从 API 的 Swagger 文档站点检查堆栈跟踪。例如 api.domain.com/help/indexyourApiUrl/swagger/v1/swagger.json

我发现一个链接也有帮助:https://github.com/domaindrivendev/Swashbuckle/issues/969

希望对你有帮助。

【讨论】:

  • 我也在使用 Chrome 开发工具。我们的应用程序未设置为记录到事件查看器,但我也没有在我们的自定义应用程序错误记录器中看到日志。该链接的建议可能是 .Net Core MVC 应用程序的诀窍,但这是 ASP.Net WebAPI 并且没有 ASP.Net Core 那样的中间件。现在,我确实尝试创建一个Delegating Handler 并且请求来自管道,但它显然不会引发异常。 500 错误响应为空白。
  • 你试过“yourApiUrl/swagger/v1/swagger.json”吗?从那里得到任何有用的信息?
  • 这只是给我一个 404 Not Found。我见过提到 swagger.json 但显然 Swashbuckle,对于 ASP.Net 至少为 5.6,使用了不同的方法。它只是想打MyApiUrl/swagger/docs/v1
【解决方案3】:

我遇到了同样的问题,不知道为什么。我的端点都工作正常,它们都没有来自 EntityFramework 的实体作为参数或子属性。

但我实际上有一个公共方法“public async MyAction(MyEntity entity)”,它不是用作 API,而是由内部机器人使用。

我使用标签[ApiExplorerSettings(IgnoreApi = true)]忽略它,它通过了。

我使用自定义过滤器来删除不需要的端点(我没有用自定义属性标记的端点),但是由于过滤是在稍后阶段由 Swagger 完成的,它没有到达我的过滤器,我得到了之前的内存不足异常。

【讨论】:

    猜你喜欢
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 2019-01-11
    相关资源
    最近更新 更多