我使用此调用获得了一些旧版ServiceStack客户端:
public ProductUpdateResponse GetProductUpdate(string productId, string currentVersion, string licenseId, string machineCode)
{
var client = new JsonServiceClient(baseAPI);
var resp = client.Send<ProductUpdateResponse>(new ProductUpdate() { ProductId = productId, ProductVersion = currentVersion, LicenseId = licenseId, MachineCode = machineCode });
return resp;
}
如果我运行这个指向serviceStack 3.9服务器,它可以工作。如果你运行它指向一个4.x服务器我得到一个&#34; Not Found&#34;错误。
我已将此追溯到SyncReply路径不同。
客户端POST
/api/json/syncreply/productupdate
但是在4.x服务器上,同一个syncreply路径是不同的
/api/json/reply/productupdate (works)
/api/json/syncreply/productupdate (Not Found Error)
DTO在客户端和服务器上完全相同。
我是否需要在4.x ServiceStack中更改一些配置设置以保持向后兼容?
答案 0 :(得分:1)
我能够通过将遗留的syncreply路由添加到服务器上的请求DTO来解决这个问题。
[路线(&#34; / json / syncreply / productupdate&#34;,动词=&#34; POST&#34;)]
//Request DTO
[Route("/products/{ProductId}/updates/{ProductVersion}")]
[Route("/products/{ProductId}/updates")]
[Route("/json/syncreply/productupdate", Verbs="POST")]
public class ProductUpdate
{
public string ProductId { get; set; }
public string ProductVersion { get; set; }
public string MachineCode { get; set; }
public string LicenseId { get; set; }
}
看起来像PredefinedRoutesFeature,它是定义默认处理程序路径的地方,应该有一个选项来维护传统的后备路由....
答案 1 :(得分:0)
旧版pre-defined routes were renamed in the v4 refactor,路由文档显示格式v4's pre-defined routes。
ServiceStack v4不接受v3路由,但最新版本的v3接受v3和v4-only路由,并允许服务客户端配置为使用重命名的路由:
client.UseNewPredefinedRoutes = true;