Я отвечаю за ведение документации API компании.Наш API написан на ASP.NET.Недавно я перешел на использование Swashbuckle 5.6.0, который работает хорошо.
Проблема, с которой я столкнулся, заключается в следующем:
Мы разделяем наши модели данных на данные Post и получаем данные, например WebAccountGetData.cs
и WebAccountPostData.cs
.Данные Post могут использоваться при создании (POST) и обновлении (PUT).
Большинство, если не все, поля в классах данных Post обнуляются, когда вызывается метод API, хранимый процесс возвращает сообщения об ошибках, описывающие, какие поля отсутствуют / обязательны для заполнения.API не обрабатывает обязательные поля.
Использование пустых полей означает, что Swashbuckle не добавит флаг Required в документацию.Но мы хотели бы показать, является ли поле обязательным или нет, основываясь на используемом методе Http (Post / Put).
Ключ API является обязательным параметром, так какне обнуляется.
Мне известно, что я могу использовать атрибут [Required]
из пространства имен System.ComponentModel.DataAnnotations, но при этом флаг Required будет применяться как к методам POST, так и к PUT,который мы не хотим.
В идеале я хотел бы использовать собственный атрибут, в котором я могу указать, требуется ли поле в методе Post или Put.
public class ApiRequiredAttribute : Attribute
{
public bool RequiredInPost
{
get;
set;
} = false;
public bool RequiredInPut
{
get;
set;
} = false;
}
И затем используйте его так:
[ApiRequired(RequiredInPost = true)]
public int? ApprovalStatusId
{
get;
set;
}
Есть ли способ использовать пользовательские IDocumentFilter
, IOperationFilter
или ISchemaFilter
для применения изменений (например, переключениетребуемый флаг) к свойствам схемы поля модели?Или в Swashbuckle невозможно ссылаться на атрибуты в модели?