我需要将请求转发到我的ServiceStack服务器(称为服务器1)到另一个ServiceStack服务器(称为服务器2)。我不打算讨论为什么我需要这个,而是如何在技术上解决它 这是我在服务器1和服务器2中的DTO代码:
// Jma data
[Route("/jmalist", "GET")]
[Route("/jmalist/{Instrument}/{Interval}/{Session}/{Smooth}/{Phase}", "GET")]
[Route("/jmalist/{Instrument}/{Interval}/{Session}/{Smooth}/{Phase}/{User}", "GET")]
public class JmaSets : IReturn<List<BarSet>>
{
public string Instrument { get; set; }
public int Interval { get; set; }
public string Session { get; set; }
public double Smooth { get; set; }
public double Phase { get; set; }
public string User { get; set; }
public DateTime sTime { get; set; }
public DateTime eTime { get; set; }
}
这是服务器1中的服务代码:
public class JmaSetsService : Service
{
public object Get(JmaSets request)
{
List<BarSet> jmaSetList = new List<BarSet>();
string baseUrl = "http://localhost:1311";
JsonServiceClient srv = new JsonServiceClient(baseUrl);
jmaSetList = srv.Get<List<BarSet>>(request);
return jmaSetList;
}
}
目的是接收对路由“/ jmalist”的请求,该路由然后在请求中具有完整的DTO信息,并且访问服务器2以获得DTO数据。问题是没有地方放置路线“/ jmalist”并且传递“请求”似乎没有路线随之而来。如何请求与此请求的输入完全相同的DTO,但是请求我的服务器2服务器?
另一种说明这一点的方法是确保从浏览器或REST客户端发生的事情。我可以直接对服务器1或服务器2进行DTO请求。服务器2很简单,因为它只响应请求的数据。服务器1没有数据,但会从服务器2获取数据。这是此代码的目标。
(我应该注意,我知道Json如何将字段序列化为一个新的请求URL,但这似乎非常低效且代码密集无用。)
答案 0 :(得分:0)
ServiceStack C# Service Clients在发出GET
请求时根据请求DTO的填充值使用最佳匹配路由,因此路由信息不在请求中DTO实例本身,当发送请求DTO时,服务客户端使用路径定义,其中最接近的拟合用于发出请求。
由于ServiceClients也接受字符串URL,您可以使用base.Request
获取有关服务中的请求的HTTP请求信息,另一种方法是传递调用请求的路径信息,例如:< / p>
var srv = new JsonServiceClient("http://localhost:1311");
var jmaSetList = srv.Get<List<BarSet>>(base.Request.PathInfo);