2014-09-29 46 views
1

我试图发送一个请求使用该DTO第三方API:在ServiceStack中,路由/ json/synclply来自哪里?

[Route("log_entries", "GET")] 
public class MyRequest: IReturn<MyResponse> 
{ 
} 

客户端请求:

string uri = "https://..../api/v1" 
var jsonClient = new JsonServiceClient(uri); 

// This works 
var response = client.Get<MyResponse>("/log_entries"); 

// Does not work 
var response = client.Send(new MyRequest()); 

我得到一个Not Found响应当前。当我使用Fiddler发送到http://时,我可以看到 路径/json/syncreply被添加,即../api/v1/json/syncreply>我期待了解这是从哪里来的,以及如何确保我的请求在正确的路径上发送。

干杯

回答

3

/json/syncreply是在ServiceStack API定义,作为一种方法,用于发送DTO的,而无需提供用于给定DTO的特定路由,换言之一个ServiceStack主机将作出路由基于路线类型名称为MyRequest,ServiceStack客户端可以使用Send方法解决该问题。

第三方API不使用Send

当你正在消耗使用ServiceStack.JsonServiceClient及其API第三方API不ServiceStack基础,那么Send方法是行不通的,因为他们的服务器API没有适当的路线。

Send方法仅适用于使用ServiceStack API,因为这是一个ServiceStack特定功能。

使用请求DTO

你应该让你的要求是这样,请注意Get<T>其中T是请求对象,MyRequestMyResponse

MyResponse response = client.Get<MyRequest>(); 

以及在你的路线声明对您的DTO前面添加斜线:

​​

tldr;

对于第三方API,它是不是一个ServiceStack服务,您需要使用合适的动词方法,如GetPostPut等,因此使用的DTO定义的路线,而不是json/syncreply路线,因此干脆避免Send方法。

+1

很好的解释,谢谢 – MikeW 2014-09-30 02:49:55

+0

@MikeW不客气 – Scott 2014-09-30 07:25:25