Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" Swashbuckle/Swagger与ASP.NET Core:API定义加载失败

129

我开发了一个ASP.NET Core 2应用程序,并包含Swagger。一切都很顺利,直到我引入了一个没有明确定义HTTP动作的方法:

public class ErrorController : Controller
{
    [Route("/error")]
    public IActionResult Index()
    {
        return StatusCode(500, new Error("Internal error."));
    }
}

使用这种方法启动应用程序时,会显示以下消息:

未能加载 API 定义。

错误
提取错误 内部服务器错误 /swagger/v1/swagger.json

只要显式设置例如 [HttpGet],错误就会消失。 但问题是,我需要此方法适用于所有可能的 HTTP 操作。 当然,我可以明确指定所有操作,但我觉得 Swagger 应该能够正确处理这个问题。

为什么 Swagger 会出现这种行为?

是否有任何配置可供使用?


1
我需要这个方法对所有可能的HTTP操作进行触发。为什么你需要支持所有方法,而不仅仅是GET? - Set
你能分享一下你的Swashbuckle配置吗? - Helder Sepulveda
在这种情况下,@Set将Error端点用作异常处理程序。根据请求的HTTP操作,调用Error端点上的相应操作。 - Ash
1
@HelderSepu 配置非常简单:services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Info { Title = "My Service", Version = "v1" }); }); app.UseSwagger(c => { c.PreSerializeFilters.Add((swagger, httpReq) => swagger.Host = httpReq.Host.Value); }); app.UseSwaggerUI(c => { c.RoutePrefix = "swagger"; // 在根目录下提供UI c.SwaggerEndpoint("/swagger/v1/swagger.json", "V1 Docs"); }); - Ash
在我的情况下,这是因为我在两个API中使用了相同的路由,所以我纠正了它,为每个API使用了唯一的路由,然后它就正常工作了。 - undefined
显示剩余2条评论
36个回答

0

对我来说,问题是在MapControllers中间件之后注册Swagger。一旦我将其移动到之前,它就可以工作了。


0

对我来说,问题通过添加HttpGet属性并删除索引方法得到解决。


0
确保你的控制器方法使用 [HttpPost] 和/或 [HttpGet] 进行标记。

0

在你的操作中使用 [HttpGet("Post")] 或 [HttpGet("Get")]


0

enter image description here

而且日志.....

System.ArgumentOutOfRangeException: Count cannot be less than zero. (Parameter 'count')

在我的情况下,Route 定义是错误的。 之前(返回错误) 请注意 Route 定义中缺少 {花括号}。
[HttpGet]
[Route("id:guid")]

执行完毕(一切正常 - 无错误)

[HttpGet]
[Route("{id:guid}")]

0
我发现在对象类(get、put或post)中使用枚举也会导致这个问题。
通过删除以下行:

AddJsonOptions

我解决了这个问题。
options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接