Я использую Swashbuckle для генерации документации Swagger для моего проекта ASP. Net Core 3.1 OData.
Генерация методов контроллеров идеальна. И он правильно генерирует схему на основе моделей, за исключением одного:
Для каждой модели в схеме также генерируется дополнительная запись [ModelName]IQueryableODataValue
, как показано на снимке экрана ниже:
![swagger doc screenshot](https://i.stack.imgur.com/8vjSV.png)
Синий флажок указывает модель. Записи модели, обведенные красным, являются лишними записями, которые также добавляются.
Обратите внимание, что также создается модель Void
, также обведенная красным.
Как получить чванство документация, чтобы пропустить записи модели, которые я обведен красным? Я подозреваю, что это связано с добавлением SchemaFilter. Но я не могу понять, как применить его для решения этой проблемы.
РЕДАКТИРОВАТЬ: комментарий @ 0909EM побудил меня еще немного покопаться в SchemaFilter, и в итоге я применил следующий SchemaFilter:
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
using System.Linq;
namespace MyProject.SwaggerConfig
{
public class RemoveBogusDefinitions : ISchemaFilter
{
public void Apply(OpenApiSchema schema, SchemaFilterContext context)
{
foreach (var item in context.SchemaRepository.Schemas.Keys.Where(r => r.EndsWith("ODataValue")))
context.SchemaRepository.Schemas.Remove(item);
context.SchemaRepository.Schemas.Remove("Void");
}
}
}
Это работает до тех пор, пока LAST schema
, добавленный к context
, является допустимой моделью, которую я хочу сохранить. Проблема в том, что приведенный выше код выполняется, а затем schema
добавляется к context
. Поэтому, если последняя обрабатываемая schema
окажется той, которую я хочу исключить, приведенный выше код этого не сделает.
Как предотвратить добавление schema
в context