swagger.json 路径和定义为空。规范中没有定义操作

Ham*_*loo 5 c# swagger asp.net-core-2.1 .net-core-2.1

我正在开发一个 .netcore Web 应用程序。我正在使用 swagger 并进行了所有必要的调整。不幸的是它不起作用,我只是No operations defined in spec!在 swagger 输出页面中看到。

带有/swagger/v1/swagger.json以下内容的 swagger 文件:

{
  "swagger": "2.0",
  "info": {
    "version": "v1",
    "title": "Something"
  },
  "paths": {},
  "definitions": {}
}
Run Code Online (Sandbox Code Playgroud)

我想在 swagger 输出页面中查看我的控制器及其操作。

Ham*_*loo 4

经过一些研究,我发现我的问题是在 .NetCore2.1 中使用 swagger 和 OData。我找到了这个问题的解决方案。

首先我添加了以下两个 Nuget 包:

Swashbuckle.AspNetCore
Swashbuckle.AspNetCore.Annotations
Run Code Online (Sandbox Code Playgroud)

然后,我在 Startup.cs 中添加了以下代码

services.AddMvc(options => {
                foreach (var outputFormatter in 
options.OutputFormatters.OfType<ODataOutputFormatter>().Where(_ => 
_.SupportedMediaTypes.Count == 0))
                {
                    outputFormatter.SupportedMediaTypes.Add(new 
MediaTypeHeaderValue("application/prs.odatatestxx-odata"));
                }
                foreach (var inputFormatter in 
options.InputFormatters.OfType<ODataInputFormatter>().Where(_ => 
_.SupportedMediaTypes.Count == 0))
                {
                    inputFormatter.SupportedMediaTypes.Add(new 
MediaTypeHeaderValue("application/prs.odatatestxx-odata"));
                }
            }).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
Run Code Online (Sandbox Code Playgroud)

我在控制器中添加了以下代码行:

[ApiExplorerSettings(IgnoreApi = false)] 
Run Code Online (Sandbox Code Playgroud)

请注意,它对我有用,但可能需要更多的研究来了解最终的副作用