2014-11-21 137 views
1

嗨,我是新来的servicestack 有问题,与路由 我有相匹配的路线Servicestack路由问题

[Route("/Person/{ID}", "GET")] 
public class GetPersonByID : IReturn<PersonResponse> 
{ 
    public decimal ObjectId { get; set; } 
} 
[Route("/Organization/{ID}/Person", "GET")] 
public class GetPersonByOrganizationId : List<PersonResponse> 
{ 
    public decimal ObjectId { get; set; } 
} 

但后来我试图/Organization/281478302400588/Persons,我得到一个错误说 Unable to bind request

堆栈跟踪:在ServiceStack.Host.RestHandler.CreateRequest(IRequest httpReq, IRestPath restPath)在 ServiceStack.Host.RestHandler.ProcessRequestAsync(IRequest httpReq, IResponse httpRes,字符串operationName)

回答

1
  • 你需要确保的是,在路线段名的DTO的属性相匹配。所以{ID}应该{ObjectId}

  • 在第二个请求,你应该使用IReturn<List<PersonResponse>>,而不是你的要求从List<PersonResponse>继承

[Route("/Person/{ObjectId}", "GET")] 
public class GetPersonByID : IReturn<PersonResponse> 
{ 
    public decimal ObjectId { get; set; } 
} 

[Route("/Organization/{ObjectId}/Person", "GET")] 
public class GetPersonByOrganizationId : IReturn<List<PersonResponse>> 
{ 
    public decimal ObjectId { get; set; } 
} 
  • 你也注意到你正在努力/Organization/281478302400588/Persons已使用请求中有Persons,但路由为Person,因此请相应地更改请求或路由。 (可能是最好的途径,即[Route("/Organization/{ObjectId}/Persons", "GET")]

然后在你的服务确保您设置它与此类似:。

public class PersonService : Service 
{ 
    public PersonResponse Get(GetPersonByID request) 
    { 
     // return new PersonResponse(); 
    } 

    public List<PersonResponse> Get(GetPersonByOrganizationId request) 
    { 
     // return new List<PersonResponse>(); 
    } 
} 

我希望帮助

+1

它的工作就像一个魅力 – 2014-11-25 23:10:29

+0

@KennethFoliJørgensen太棒了,很高兴帮助 – Scott 2014-11-25 23:11:58