1

我正在尝试使用此 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目前正在收到回复。当我发送到http://使用 Fiddler 时,我可以看到/json/syncreply添加了路径,即../api/v1/json/syncreply> 我希望了解它的来源以及如何确保我的请求在正确的路径上发送。

干杯

4

1 回答 1

3

在 ServiceStack API 中定义的/json/syncreply路由,作为发送 DTO 的一种方法,无需为给定的 DTO 提供特定路由,换句话说,ServiceStack 主机将根据类型名称创建路由MyRequest,可以解析由 ServiceStack 客户端使用该Send方法。

3rd 方 API 不使用Send

由于您使用 3rd 方 APIServiceStack.JsonServiceClient并且他们的 API 不是基于 ServiceStack 的,因此该Send方法将不起作用,因为他们的服务器 API 没有适当的路由。

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

使用请求 DTO

您应该像这样提出请求,请注意请求对象在Get<T>哪里,而不是.TMyRequestMyResponse

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

并且还在 DTO 的路由声明前面添加一个斜杠:

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

tldr;

对于不是 ServiceStack 服务的 3rd 方 API,您需要使用适当的 VERB 方法,例如Get,PostPut,因此使用 DTO 上定义的路由,而不是json/syncreply路由,因此简单地避免使用该Send方法。

于 2014-09-29T11:50:52.117 回答