【发布时间】:2013-07-23 22:38:01
【问题描述】:
我正在尝试向我的 SS 服务发出 GET 请求,但是当我将它们作为 URL 段发送时,参数具有空值。根据https://github.com/ServiceStack/ServiceStack/wiki/Routing我可以通过两种方式调用服务:
/资源/p1/p2/p3 或者 /resource?p1=v1&p2=v2&p3=v3
第一种方法永远不会起作用(参数的默认值取决于它们的类型),而第二种方法总是有效的。我不想使用第一种方法调用服务。
这是我的代码
//Request DTO
[Route("/test/{Param1}/{Param2}/{Param3}")]
public class Test
{
public string Param1 { get; set; }
public int Param2 { get; set; }
public string Param3 { get; set; }
}
//Response DTO
public class TestResponse : IHasResponseStatus
{
public ResponseStatus ResponseStatus { get; set; }
public string Inputs { get; set; }
}
我做错了什么?
【问题讨论】:
-
您的问题已经在这里得到解答:(stackoverflow.com/questions/14128684/…)
-
感谢您指出这一点,但据我所知,我的 DTO 与 mythz 推荐的相同。为什么它不起作用?
-
似乎它确实可以正常工作。但是,在我的例子中,{Param1} 的值是一个 Url。例如,它不接受 http%3A%2F%2Fdev%2Fasdf.png。使用浏览器或 Postman 调用服务会引发 400 bad request 错误。奇怪的是,如果我删除编码的“http://”部分,相同的编码值就可以正常工作。有谁知道是什么导致了这种奇怪的行为?
-
我还注意到,当发送带有编码斜杠 (%2F) 的字符串值作为 ServiceStack 请求中的路径段时,它将无法正确绑定或路由请求。
-
我发现 this discussion 似乎证实了这是 ServiceStack 的一般限制,至少在 IIS 上运行时是如此。
标签: c# get servicestack