2014-02-28 30 views
0

我刚刚将Swagger启动并运行,至今它的确令人印象深刻。我试图让一些初始端点为客户端工作,并且我正在挂上[ApiMember]属性。ServiceStack Swagger请求中的可选字段DTO

所以认为这是我的要求DTO(不是真正的只是一个例子):

[Route("/person", "POST") 
public class Person 
{ 
    public ing Age { get; set; } 
    public string Name { get; set; } 
} 

这将扬鞭显示为参数类型的身体。

但我想传达可选属性...说例如Name属性是可选的。所以我的假设是这样的:

[ApiMember(IsRequired = true)] 
public string Name { get; set; } 

但是,这样做会创建参数作为路径参数。示例swagger api文档显示了此功能 - 对象中的字段是可选的。有没有办法与ServiceStack和Swagger做到这一点?

编辑:我已经知道,值类型我可以设置它们为空,并将它们设置为可选。我也知道你不需要设置引用类型为空,但我需要以某种方式反映在文档中。

回答

1

ServiceStack Swagger集成目前always marks reference type properties in the request as required(虽然可能会改变)。您可以使用ModelFilter回调(在将其注册为插件时指定为属性SwaggerFeature)修改发送到回调的每个ModelProperty对象的Required属性。如果您需要额外的描述性文字来标记必填/可选字段,您还可以使用此技术修改每个ModelProperty的Description

请注意,如果要使用ApiMember属性注释请求正文参数,则必须在该属性中指定ParameterType = "body"Name = "(name of property)"。但目前对请求主体参数使用此属性的操作并不多;它对于“查询”或“路径”参数类型非常有用。