使用ServiceStack调用错误的Rest服务

时间:2012-05-22 07:38:08

标签: servicestack

在过去的一个月里,我注意到一个奇怪的行为,即使用服务堆栈调用错误的REST服务。

一切似乎都在工作,然后当我添加新的REST服务时,我的工作REST服务无法正常工作(即调用了错误的REST服务)。

我将解释如何获得服务的数据,这可以解释为什么我会遇到问题。

我最初有:

[DataContract(Name = "MyService", Namespace = "")]
[RestService("/api/v1/dvbs/{ServiceName}", "GET", "application/xml")]
public class GetServiceDto
{
    [DataMember(Name = "SessionId", Order = 1)]
    public string SessionId { get; set; }
    [DataMember(Name = "UserName", Order = 2)]
    public string UserName { get; set; }
    [DataMember(Name = "ServiceName", Order = 3)]
    public string ServiceName { get; set; }
}

当我在所有调用中传递相同的数据(sessionid,username和servicename)时,任何新服务都以:

开头
[DataContract(Name = "MyService", Namespace = "")]
[RestService("/api/v1/dvbs/{ServiceName}/tuners", "GET", "application/xml")]
public class GetTunersDto : GetServiceDto
{
}

正如我提到的,这一切都运行良好,但是当我添加新服务时,当我调用“api / v1 / dvbs / {ServiceName}时,将调用服务”api / v2 / dvbs / {ServiceName} / tuners“。

我删除了继承的关系,所以我有:

[DataContract(Name = "MyService", Namespace = "")]
[RestService("/api/v1/dvbs/{ServiceName}/tuners", "GET", "application/xml")]
public class GetDvbConfigTunersDto
{
    [DataMember(Name = "SessionId", Order = 1)]
    public string SessionId { get; set; }
    [DataMember(Name = "UserName", Order = 2)]
    public string UserName { get; set; }
    [DataMember(Name = "ServiceName", Order = 3)]
    public string ServiceName { get; set;}
}

现在工作正常。

奇怪的是它工作得很好,只有当我在以后添加新服务时才会出现错误的映射。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

每个服务只能有1个Request DTO,并且继承请求DTO会继承属性路由,这使得 GetTunersDto 继承与 GetServiceDto 相同的路由,这些路由填充ServiceStack并且具有冲突和模棱两可的路线。

解决方案是不在DTO上使用继承(尤其是请求DTO)。