从ServiceStack 3.9升级到4.x后,SyncReply URL不同

时间:2015-03-05 23:35:10

标签: c# servicestack

我使用此调用获得了一些旧版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中更改一些配置设置以保持向后兼容?

2 个答案:

答案 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;