Swagger 无法加载 API 定义 500 内部服务器错误

Viv*_*Dev 5 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);
Run Code Online (Sandbox Code Playgroud)

接下来在配置方法中,我有,

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;
});
Run Code Online (Sandbox Code Playgroud)

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

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

我收到以下错误

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

Asp.net Mvc 核心控制器出现 Swagger 错误

似乎 Swagger 不接受 Asp.net core mvc 控制器。如果我注释掉该 mvc 控制器,一切都会恢复正常。

有办法解决这个问题吗?

小智 4

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

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

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