2013-05-02 237 views
1

根据multiple文档sources,可以将路由定义为DTO上的属性。我有以下的DTO(最后一个是在不同的文件):路由属性被忽略

[Route("/hdos", "GET")] 
public class GetHdos 
{ 
    public bool IncludeAdminUsers { get; set; } 
} 

[Route("/hdos/{Id}", "GET")] 
public class GetHdo 
{ 
    public Guid Id { get; set; } 
} 

[Route("/hdos/{HdoId}/facilities", "GET")] 
public class GetHdoFacilities 
{ 
    public Guid HdoId { get; set; } 
} 

通过以下服务一栋(最后一个是在不同的文件):

public object Get(GetHdos request) 
{ 
    return _hdos.GetAll(request.IncludeAdminUsers); 
} 

public object Get(GetHdo request) 
{ 
    return _hdos.GetById(request.Id) 
} 

public object Get(GetHdoFacilities request) 
{ 
    return _hdos.GetFacilities(request.HdoId); 
} 

任何调用

/hdos 
/hdos/a82b955195e34bfda2fdde7da68f8992 
/hdos/a82b955195e34bfda2fdde7da68f8992/facilities 

返回Method not supported。但是,如果我将它们称为类名称,则路由会被击中。有什么我失踪?我需要以某种方式在AppHost中激活这些路线吗?

+2

在你的AppHostBase构造函数中,你是否指定程序集来查找你的服务?也不确定你的意思是通过类名称来调用它们吗? – kampsj 2013-05-03 13:22:27

+0

我确实添加了服务组件。我需要添加DTO组件吗?我的意思是如果我打电话给URL'/ gethdos'或'/ getHdo',那么第一个或第二个服务将被分别命中。这是默认的路由约定,即DTO类名称。 – Tyrsius 2013-05-03 15:16:28

回答

2

它看起来像ServiceStack映射你的路线不同的REST和HTTP类型。我在提问中没有提及Json/syncreply/hdos因为我认为Json/syncreply是每个呼叫的一部分。我错了。如果你这样做,它会查找DTO类名作为路线。

要使用在DTO上声明的路线作为属性,您只需调用路线,即可离开json/syncreply。反过来并不直接在文档中说明,但我仍然感到困惑。

+0

对,[预先定义的自动路由不应与用户定义的自定义路由混淆](https://github.com/ServiceStack/ServiceStack/wiki/Routing#pre-defined-routes)。 – mythz 2013-05-03 18:05:57