Неверный клиент, сгенерированный NSwagStudio - PullRequest
0 голосов
/ 04 сентября 2018

Я использую NSwagStudio для генерации клиента для моего WebAPI (.NET Core 2.0). К сожалению, сгенерированный клиент бесполезен.

Например:

[Route("v1/documentsets")]
.
.
.
[Route("")]
[HttpGet]
[Authorize(Policy = AuthorizationPolicyKeys.ReadOnly)]
[ProducesResponseType(typeof(ResponseContainer<PagingInfo, IList<GetDocumentSetsResponseDto>>), 200)]
public async Task<IActionResult> GetAll(...)

становится:

общедоступный System.Threading.Tasks.Task V1DocumentsetsGetAsync (...)

Это потому, что - swagger.json (что я использую для генерации) также недопустим (я думаю):

"responses": {
  "200": {
    "description": "Success",
    "schema": {
      "$ref": "#/definitions/Comp.Shared.Helpers.ResponseContainer`2[[Comp.Shared.Helpers.PagingInfo, Comp.Shared, Version=2.0.16.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IList`1[[Comp.Documents.Private.DataTransferObjects.Documents.GetDocumentsResponseDto, Comp.Documents.Private, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]"
    }
  }
}

$ ref здесь недействителен ... Типы PagingInfo и ResponseContainer относятся к пакету Nuget.

Сгенерированное имя метода - V1DocumentsetsGetAsync - также кажется странным. Идентификатор операции из swagger.json: «идентификатор операции»: «V1DocumentsetsGet» - это тоже странно. Почему номер версии указан в сгенерированном идентификаторе?

Настройки Swagger:

    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new Swashbuckle.AspNetCore.Swagger.Info { Title = "Documents API", Version = "v1" });                
        var xmlPath = $@"{AppDomain.CurrentDomain.BaseDirectory}\bin\{Assembly.GetExecutingAssembly().GetName().Name}.XML";
        if (File.Exists(xmlPath))
        {
            c.IncludeXmlComments(xmlPath);
        }
        c.DescribeAllEnumsAsStrings();
        c.CustomSchemaIds((type) => type.FullName);
        c.MapType<RequestedFieldDictionary>(() => new Schema { Type = "string" });
    });

Что я должен изменить?

...