繁体   English   中英

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

[英]Where does the route /json/syncreply come from in ServiceStack?

我正在尝试使用此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 /json/syncreply ../api/v1/json/syncreply /json/syncreply >我希望了解它的来源以及如何确保我的请求是发送在正确的道路上。

干杯

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

第三方API不使用Send

当您使用ServiceStack.JsonServiceClient消耗第三方API并且它们的API不是基于ServiceStack时, Send方法将无法工作,因为它们的服务器API没有适当的路由。

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

使用请求DTO

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

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

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

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

tldr;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM