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

问题描述 投票:0回答:6

我正在开发一个 .netcore Web 应用程序。我正在使用 swagger 并且我已经做了所有必要的调整。不幸的是它不起作用,我只在 swagger 输出页面中看到

No operations defined in spec!

带有

/swagger/v1/swagger.json
的 swagger 文件包含以下内容:

{
  "swagger": "2.0",
  "info": {
    "version": "v1",
    "title": "Something"
  },
  "paths": {},
  "definitions": {}
}

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

c# swagger asp.net-core-2.1 .net-core-2.1
6个回答
4
投票

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

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

Swashbuckle.AspNetCore
Swashbuckle.AspNetCore.Annotations

然后,我在 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);

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

[ApiExplorerSettings(IgnoreApi = false)] 

请注意,它对我有用,但可能需要更多研究才能最终发现副作用


0
投票

听起来您需要在控制器中添加一些路由。 对于 REST 服务,您需要将它们与 Visual Studio 自动构建的服务分开添加。 例如 // 获取:项目 [http获取] [路线(“/项目”)] ...其余功能... 这将为您的 swagger 提供单击按钮时它会执行的操作的参考。


0
投票

我使用的是.Net 7 和 Swagger 6.5。我需要做的就是在

builder.Services.AddSwaggerGen();

之前添加以下内容
builder.Services.AddControllersWithViews();

0
投票

就我而言,控制器上有 [ApiExplorerSettings] 属性。删除后Swagger开始显示API。


-1
投票

您需要在

XML Documentation file
选项卡下启用
project obtions => Build

然后需要通过 swagger 读取这个文件,以便 swagger 可以从中创建文档。

private static string[] XmlCommentsFilePath
{
    get
    {
        var basePath = PlatformServices.Default.Application.ApplicationBasePath;

        var apiDocFile = typeof(Startup).GetTypeInfo().Assembly.GetName().Name + ".xml";
        var apiPath = Path.Combine(basePath, apiDocFile);

        return new[] {apiPath};

    }
}

在配置服务中

services.AddSwaggerGen(options =>
{ 
    var provider = services.BuildServiceProvider().GetRequiredService<IApiVersionDescriptionProvider>();

    // add a swagger document for each discovered API version
    provider.ApiVersionDescriptions.ForEach(x => options.SwaggerDoc(x.GroupName, CreateInfoForApiVersion(x)));

    ....
});

-1
投票

请在控制器中添加任何方法,例如然后显示 swagger 方法

  [HttpGet]
    [EnableQuery]
    public IQueryable<int> Get()
    {
        return 1;
    }
© www.soinside.com 2019 - 2024. All rights reserved.