代码之家  ›  专栏  ›  技术社区  ›  Fabricio Rodriguez

调试Swashbuckle错误-未能加载API定义

  •  3
  • Fabricio Rodriguez  · 技术社区  · 8 年前

    是否有任何方法可以获得堆栈跟踪或swashbuck/Swagger错误的内部异常?在某个时候,它停止了工作。我不确定是不是在我从.Net Core2.0升级到2.1的时候,但我很确定之后它仍然在工作。当我导航到myapidomain/swagger/index.html时,会出现以下错误:

    enter image description here

    这不是很有帮助大约两周前还在工作。。。我没有改变任何夸张的配置。一如既往:

    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.1web API上使用swashbucker.AspNetCore 3.0.0。

    2 回复  |  直到 8 年前
        1
  •  14
  •   StuartLC    8 年前

    同意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)
    ...
    

    从而产生错误:

    SwaggerError

    你现在应该可以追踪并修复。

        2
  •  0
  •   MsDeveloper    8 年前

    我今天遇到了这个问题,并试图解决它,您必须在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();
        }
    

    在我的项目中效果很好,

    推荐文章