关于泛型类型响应对象的文档,我遇到了Swagger的ServiceStack实现的问题.强类型响应对象被正确记录和显示,但是一旦使用泛型类型对象作为响应,文档就不准确并且会产生误导.
请求DTO
[Route("/users/{UserId}", "GET", Summary = "Get a specific User Profile")]
public class GetUser : IReturn>
{
[ApiMember(Description = "User Id", ParameterType = "path", IsRequired = true)]
public int UserId { get; set; }
}
回复DTO
public class ServiceResponse : IServiceResponse
{
public IList Errors { get; set; }
public bool Successful { get; set; }
public string Message { get; set; }
public string StackTrace { get; set; }
public T Data { get; set; }
public ServiceResponse()
{
Errors = new List();
}
}
响应DTO类型
public class UserProfile : RavenDocument
{
public UserProfile()
{
Races = new List();
Workouts = new List();
}
public string FirstName { get; set; }
public string LastName { get; set; }
public string DisplayName { get; set; }
public DateTime? BirthDate { get; set; }
public Gender? Gender { get; set; }
public string UltracartPassword { get; set; }
public string UltracartCartId { get; set; }
[UniqueConstraint]
public string Email { get; set; }
public string ImageUrl { get; set; }
public FacebookUserInfo FacebookData { get; set; }
public GoogleUserInfo GoogleData { get; set; }
public DateTime CreatedOn { get; set; }
public DateTime? LastUpdated { get; set; }
public UserAddress ShippingAddress { get; set; }
public UserAddress BillingAddress { get; set; }
public IList Races { get; set; }
public IList Workouts { get; set; }
}
这些例子很简单.没有什么是真正的hacky或聪明的事情,但这是我从Swagger开箱即用的示例文档:
如您所见,泛型类型未正确记录,而是使用其他类型.由于我正在使用相同的ServiceResponse包装器来处理所有响应,因此这种情况正在全面发生.