加载Swagger API定义失败 500内部服务器错误

5
我创建了一个全新的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 Core MVC 控制器。如果我注释掉该 MVC 控制器,一切都可以正常工作。

有没有解决方法。


请考虑这个答案,希望能解决您的问题。 - Muhammad Talha
2个回答

4

尽量使用HTTP动词标记来修饰您在控制器中的方法:

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

如果您不想设置路由,只需使用 [HttpGet] 注解方法即可解决问题。


3

您的文档未被导入。

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

尝试按以下方式导入您的文档,它应该可以正常工作。

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

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