Мне дали образец определения чванства и попросили создать соответствующий веб-API. (У меня нет разрешений на создание API из SwaggerHub, так что это не вариант). Мне нужно, чтобы мой веб-API генерировал документы Swagger как можно ближе к оригиналу.
Существующий документ Swagger включает определения схемы, включающие такие свойства:
titleOrderId string($uuid)
id of the title order - not a file number
orderDate string($date-time)
documentCount string($int32)
В YAML я вижу следующее:
Я создал те же объекты/свойства в С#, но они создают следующие схемы Swagger:
titleOrderId string
orderDate string
documentCount string
Есть ли способ указать format и description в моем коде С#, чтобы я мог создавать один и тот же вывод Swagger?
Я работаю в ASP.Net Core 6.0.





В спецификации OpenAPI нет такой вещи, как string($int32). Это должно быть либо string, если это действительно строка (независимо от того, отформатирована ли она как int), либо должно быть integer($int32), если это целое число.
Два других фиксируются следующим образом:
public class OrderItem
{
public Guid TitleOrderId { get; set; }
public DateTime OrderDate { get; set; }
public int DocumentCount { get; set; } // or change to string if it should be a string
}
ОБНОВЛЯТЬ
Чтобы добавить описание, вам необходимо установить Swashbuckle.AspNetCore.Annotations NuGet Package.
Затем включите аннотации в Startup.cs:
services.AddSwaggerGen(c =>
{
...
c.EnableAnnotations();
});
Затем вы добавляете описание, используя атрибут SwaggerSchema. Вы также можете установить DocumentCount на string и добавить параметр формата int32. Это нарушит спецификацию OpenAPI, но будет делать то, что вы хотите:
public class OrderItem
{
[SwaggerSchema("id of the title order - not a file number")]
public Guid TitleOrderId { get; set; }
public DateTime OrderDate { get; set; }
[SwaggerSchema(Format = "int32")]
public string DocumentCount { get; set; }
}
Вы также можете сделать это так, если очень хотите, но я бы рекомендовал оставить типы Guid и DateTime:
public class OrderItem
{
[SwaggerSchema("id of the title order - not a file number", Format = "uuid")]
public string TitleOrderId { get; set; }
[SwaggerSchema(Format = "date-time")]
public string OrderDate { get; set; }
[SwaggerSchema(Format = "int32")]
public string DocumentCount { get; set; }
}
Любая идея, как получить дополнительное описание для отображения? Я попытался добавить краткий комментарий к своим свойствам, но, похоже, это не сработало.
Я ценю вашу помощь. У меня есть еще один вопрос. Я только что наткнулся на другую схему, подобную этой: startDate string($date). Использование DateTime приводит к startDate string($date-time). Есть ли эквивалент Date в С#?
@RHarris есть класс DateOnly, но он не будет правильно сериализовать/десериализовать в JSON и не будет предоставлять правильные аннотации схемы. Я бы предложил использовать тип DateTime и [SwaggerSchema(Format = "date")].
Я понятия не имею, почему documentCount является строкой. Изменение типов свойств, как вы предложили, действительно помогло. Однако documentCount отображается как целое число ($ int32) вместо строки ($ int32). В любом случае, если вы опубликуете свой ответ, я приму его как ответ. Спасибо