route / json / syncreply在ServiceStack中来自哪里?

时间:2014-09-29 09:10:32

标签: c# servicestack servicestack-bsd

我正在尝试使用此DTO向第三方api发送请求:

[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&gt;我希望了解它的来源以及如何确保我的请求在正确的路径上发送。

干杯

1 个答案:

答案 0 :(得分: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是请求对象,MyRequest不是MyResponse

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

并在DTO的路线声明前面添加一个斜线:

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

tldr;

对于非ServiceStack服务的第三方API,您需要使用适当的VERB方法,例如GetPostPut等,以便在DTO上定义路由使用,而不是json/syncreply路由,因此只需避免使用Send方法。