swagger.json paths and definitions are empty. No operations defined in spec

烈酒焚心 提交于 2020-01-21 18:15:22

问题


I am developing a .netcore web application. I am using of swagger and I've made all the necessary adjustments. Unfortunately it does not work and I just see No operations defined in spec! in the swagger output page.

The swagger file with /swagger/v1/swagger.json has the following content:

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

I want to see my controllers and their actions in swagger output page.


回答1:


after some research i was found that my problem was about using swagger along with OData in .NetCore2.1. i found a solution for this problem.

first i added two following Nuget packages:

Swashbuckle.AspNetCore
Swashbuckle.AspNetCore.Annotations

then, i added following codes in 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);

the, i added following code line in controllers:

[ApiExplorerSettings(IgnoreApi = false)] 

please note that it was worked for me but it may be need more research for eventually side effects




回答2:


you need to enable XML Documentation file under project obtions => Build tab.

Then you need to read this file through swagger so that swagger can create documentation from it.

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};

    }
}

In ConfigureServices

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)));

    ....
});


来源:https://stackoverflow.com/questions/54159987/swagger-json-paths-and-definitions-are-empty-no-operations-defined-in-spec

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!