3

我有一个定义了以下路线的 Dto

        [Route("/route/{Id}/{Status}")]
        public class JustIdAndStatus : IReturn {
            public long Id { get; set; }
            public long Status { get; set; }
        }

然后我用类似的东西调用服务

本地主机:9040/route/1/100

或者

本地主机:9040/route/0/100

一切顺利。

但是当我使用其中一个服务客户端时,如果任何值为 0(long 的默认值),则会出现异常。

   var client = new JsonServiceClient("http://127.0.0.1:9040");

   var request = new JustIdAndStatus() {
                    Id = 0,
                    Status = 1
                };

   var response = client.Get(request);

我得到的例外是

System.InvalidOperationException : None of the given rest routes matches 'JustIdAndStatus' request:
    /route/{Id}/{Status}:   Could not match following variables: Id
   at ServiceStack.ServiceClient.Web.UrlExtensions.ToUrl(IReturn request, String httpMethod, String formatFallbackToPredefinedRoute) in UrlExtensions.cs: line 65
   at ServiceStack.Common.Tests.UrlExtensionTests.Can_create_url_with_JustIdAndStatus(Int64 id, Int64 status) in UrlExtensionTests.cs: line 91

我在服务堆栈存储库https://github.com/ServiceStack/ServiceStack/commit/b34a5906a265da19d916ea47ee80783bd866abcb上跟踪了此提交的问题

我注意到当我从 nuget 从 ServiceStack 3.9.38 更新到 3.9.40 时。

我想知道这种行为是否正确,所以我以错误的方式使用了路由,或者这可能是一个问题,可以提交给 github 上的问题跟踪器。

我还使用在 ServiceStack.Commons 源代码中找到的基本测试进行了测试

https://gist.github.com/anonymous/5216727

提前致谢!

4

1 回答 1

3

我同意您的观点,您所描述的应该是路由中特别引用该属性的预期行为。

您提到的提交旨在禁止在成员被降级为查询字符串的路由上使用默认参数值。但是,它似乎也导致了您使用显式路由描述的问题。

我正在整理一个拉取请求来解决这个问题并添加一些测试来反映预期的行为。

于 2013-03-27T21:33:17.287 回答