ServiceStack JsonServiceClient:SendAsync忽略Route属性使用错误路径问题
ServiceStack客户端调用路由匹配异常
开发环境
- 项目类型:Xamarin移动端应用
- 开发工具:Visual Studio 2019 16.9
- 依赖包:ServiceStack.Client v5.10.4
遇到的问题
在项目中通过JsonServiceClient发起服务请求时,后端直接返回对应端点不存在的错误,抓包核对后发现实际请求路径和预期完全不符。
- 触发异常的调用代码:
JsonServiceClient client = new JsonServiceClient("https://my.domain.com/"); SetHeaders(client); var request = ...; // 实现IRequest<T>接口的请求对象 // 这行调用直接失败,提示找不到对应服务 var result = await client.SendAsync(request);
- 抓包获取的实际请求地址:
https://my.domain.com/json/reply/Login,走了ServiceStack的默认JSON回复路由,完全没有读取DTO上定义的自定义路由规则。
请求DTO定义
请求DTO放在独立的类库项目中,已经标注了自定义路由特性:
[Route("/mybasepath/endpoint", "POST")] public class Login : IReturn<LoginResponse> { }
验证正常的调用方式
把SendAsync替换为明确指定POST谓词的PostAsync方法后,请求路径会正确匹配DTO上标注的路由地址,接口可以按预期正常响应:
JsonServiceClient client = new JsonServiceClient("https://my.domain.com/"); SetHeaders(client); var request = ...; // 实现IRequest<T>接口的请求对象 // 这行调用可以正常跑通 var result = await client.PostAsync(request);
待确认的疑问
目前还没搭建可以稳定复现问题的最小测试工程,想确认这个异常是不是自己漏了某步简单的基础配置导致的。
内容的提问来源于stack exchange,提问作者Ted
相关产品推荐
相关产品推荐

