使用Swagger无法加载API定义500 Internal Server Error

时间:2019-02-05 11:48:23

标签: swagger

我创建了一个全新的Asp.net Core 2.2 Web API应用程序。 然后,我按以下方式配置Swagger。 在启动文件的ConfigureServices方法中,我有以下内容。

services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new Info
    {
        Title = "My API", Version = "v1" 
    });
});

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

下一步是Configure方法,我有

if (env.IsDevelopment())
    app.UseDeveloperExceptionPage();
else
    app.UseHsts();

app.UseSwagger();
app.UseHttpsRedirection();
app.UseMvc();

app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
    c.RoutePrefix = string.Empty;
});

到目前为止,一切都很好。 Swagger UI很棒。 当我引入一个简单的MVC控制器时,问题开始了。

[Route("[controller]/[action]")]
public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}

我收到以下错误

无法加载API定义错误访存错误内部服务器错误/swagger/v1/swagger.json

Swagger Error with Asp.net Mvc Core Controller

似乎Swagger不接受Asp.net核心mvc控制器。如果我注释掉该mvc控制器,一切将再次正常运行。

有没有解决的办法。

2 个答案:

答案 0 :(得分:1)

尝试使用 http 动词表示法在控制器中装饰您的方法:

[Route("[controller]/[action]")]
public class HomeController : Controller
{
    [HttpGet, Route("myRoute")]
    public IActionResult Index()
    {
        return View();
    }
}

如果您不想放置路由,只需 [HttpGet] 表示法方法即可解决问题。

答案 1 :(得分:0)

您的文档未导入。

假设您的项目是 github.com/deepaksinghvi/catalogwf,并且 docs 文件夹在其中。

尝试按如下方式导入您的文档,它会起作用

_ "github.com/deepaksinghvi/catalogwf/docs"