Пути и определения swagger.json пусты. Никакие операции не определены в спецификации

Я разрабатываю веб-приложение .netcore. Я использую чванство и внес все необходимые коррективы. К сожалению, это не работает, и я просто вижу No operations defined in spec! на странице вывода swagger.

Файл swagger с /swagger/v1/swagger.json имеет следующее содержимое:

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

Я хочу видеть свои контроллеры и их действия на странице вывода swagger.


person Hamid Nasirloo    schedule 12.01.2019    source источник


Ответы (2)


после некоторого исследования я обнаружил, что моя проблема заключалась в использовании swagger вместе с OData в .NetCore2.1. я нашел решение этой проблемы.

сначала я добавил два следующих пакета 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);

the, я добавил в контроллеры следующую строку кода:

[ApiExplorerSettings(IgnoreApi = false)] 

обратите внимание, что это сработало для меня, но, возможно, потребуются дополнительные исследования для выявления побочных эффектов

person Hamid Nasirloo    schedule 13.01.2019

вам необходимо включить 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};

    }
}

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

    ....
});
person Derviş Kayımbaşıoğlu    schedule 12.01.2019
comment
Благодарю за ваш ответ. Я использовал его раньше в другом проекте, и swagger автоматически считывал все действия без какого-либо файла XML. Я попробовал XML-файл из свойств проекта - ›Сборка, но это не сработало. - person Hamid Nasirloo; 12.01.2019