我有一个Dto,其中定义了以下路线
[Route("/route/{Id}/{Status}")]
public class JustIdAndStatus : IReturn {
public long Id { get; set; }
public long Status { get; set; }
}
然后我用类似
的方式调用服务本地主机:9040 /路线/百分之一
或
localhost:9040 / route / 0/100
一切顺利。
但是当我使用其中一个服务客户端时,如果任何值为0(长整数的默认值),我会收到异常。
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
提前致谢!
答案 0 :(得分:3)
我同意你的观点,你所描述的应该是预期的行为,其中该属性在路线中被特别引用。
您引用的提交旨在禁止在成员被降级到查询字符串的路由上使用默认参数值。但是,它似乎也导致了您使用显式路由描述的问题。
我正在整理拉取请求以解决问题并添加一些测试以反映预期的行为。