Servicestack - 请求DTO上的多个IReturn

时间:2014-01-20 10:03:17

标签: c# servicestack swagger-ui servicestack-bsd

是否可以在请求DTO上有多个IReturn<>

例如以下路线:

[Route("/api/whatever", "GET,POST,PUT,DELETE")]
public class WhateverRequest : IReturn<bool>, IReturn<List<Whatever>>
{
    public string WhateverId { get; set; }
}

根据请求方法,我想要另一个IReturn。 如果请求成功,则发布后删除请求应仅返回确认:

IReturn<bool>

但是在GET请求中我希望有一个:

IReturn<List<Whatever>>

如果有一种方法可以在Swagger Api /元数据页面中反映这一点,那也很好。 目前只显示第一个IReturn

这是可能的,还是为每个不同的IReturn创建路线更好?

1 个答案:

答案 0 :(得分:2)

您肯定希望创建不同的路由来处理多种返回类型。只需要一个IReturn<T>IReturnVoid,否则使用客户端将无法正确键入返回的数据。

[Route("/api/whatever", "GET")]
public class ListWhateverRequest : IReturn<List<Whatever>>
{
    public string WhateverId { get; set; }
}

// Action
public List<Whatever> Get(ListWhateverRequest request)
{
    ...
}

[Route("/api/whatever", "POST,PUT,DELETE")]
public class UpdateWhateverRequest : IReturn<bool>
{
    public string WhateverId { get; set; }
}

// Action
public bool Post(UpdateWhateverRequest request)
{
    ...
}

public bool Put(UpdateWhateverRequest request)
{
    ...
}

public bool Delete(UpdateWhateverRequest request)
{
    ...
}

我假设您从这些方法返回true以显示它们已成功完成。当出现问题时,方法是否会返回false,或者抛出异常?如果您只是在方法中抛出异常,并且从不返回false,那么请考虑将bool方法与void一起使用,而不是返回IReturnVoid。因此,如果请求没有抛出异常,则该请求成功。