У меня была такая же проблема, и я решил добавить некоторую логику в процессор документов в качестве обходного пути. Я сохранил &
, чтобы найти и заменить его.
Примечание: я использую NSwag, который ссылается на библиотеки Swashbuckle, но должен быть одинаковым или близким к тому же коду.
В моем кодовом комментарии ( обратите внимание на раздел <remarks>
, в котором я использую &
) :
/// <summary>
/// Get items in cart
/// </summary>
/// <remarks>
/// api/cart?page=1&size=3
/// </remarks>
В моем Startup.cs (ConfigureServices) я добавляю использование обработчика документов :
// sets swagger spec object properties
services.AddOpenApiDocument(s => s.DocumentProcessors.Add(new SwaggerDocumentProcessor()));
В моем обработчике документов:
public class SwaggerDocumentProcessor : IDocumentProcessor
{
public Task ProcessAsync(DocumentProcessorContext context)
{
context.Document.Info.Title = "My API Title";
context.Document.Info.Version = "v1.4";
foreach (var path in context.Document.Paths)
{
foreach (var item in path.Value.Values)
{
item.Description = item.Description.Replace("&", "&");
}
}
context.Document.Info.Description = "Description with markdown";
context.Document.Info.ExtensionData = new ConcurrentDictionary<string, object>();
context.Document.Info.ExtensionData.Add("x-logo", new
{
url =
"https://www.logos.com/mylogo.jpg",
altText = "Logo",
href = "https://website.com/"
});
return Task.CompletedTask;
}
}
В обработчике документов выше обратите внимание на следующие строки кода:
foreach (var path in context.Document.Paths)
{
foreach (var item in path.Value.Values)
{
item.Description = item.Description.Replace("&", "&");
}
}
По сути, он выполняет то, что в Document.Paths
(примеры URL GET, POST, DELETE и т. Д.) Документа спецификации API он ищет и заменяет все экземпляры &
всего на &
.