servicestack,Urlencode,servicestack" /> servicestack,Urlencode,servicestack" />

Urlencode ServiceStack不是RESTful路由中的URL解码路由参数

Urlencode ServiceStack不是RESTful路由中的URL解码路由参数,urlencode,servicestack,Urlencode,servicestack,我正在使用自托管ServiceStack提供一个API来与票务系统集成,并定义了以下路线: Routes .Add<TicketsWithStatus>("tickets/{Status}") .Add<TicketStatusCounts>("tickets"); 路由 .Add(“票证/{Status}”) .添加(“票证”); 当状态包含空格时,第一个路由的URL编码出现问题。如果我浏览到http://myservicebase/json/syn

我正在使用自托管ServiceStack提供一个API来与票务系统集成,并定义了以下路线:

Routes
    .Add<TicketsWithStatus>("tickets/{Status}")
    .Add<TicketStatusCounts>("tickets");
路由
.Add(“票证/{Status}”)
.添加(“票证”);
当状态包含空格时,第一个路由的URL编码出现问题。如果我浏览到
http://myservicebase/json/syncreply/TicketsWithStatus?Status=On%20Hold
我得到了我期待的回应。但是,如果我使用RESTful路由
http://mysevicebase/tickets/On%20Hold
我没有得到任何结果

在调试我的应用程序时,我可以看到在调用
json/syncreply
时,
On%20Hold
正在被URL解码为
On Hold
,但在使用RESTful路由时没有被解码


如何确保在通过RESTful路由调用我的服务时正确解码status属性?

ServiceStack不会对PathInfo进行URL解码,它使用ASP.NET请求对象返回的相同的
HttpRequest.PathInfo
。如果您将其更改为On+Hold

On+Hold在请求DTO中作为“On+Hold”传递,您可能会获得更好的成功。做一个HttpUtility.UrlDecode(request.Status)会让人觉得不舒服,因为json/syncreply似乎做了一个UrlDecode,我冒着双重解码的风险。如果两个URL之间存在一致性,那么我可以理解它。不知道该怎么做才是最好的!是否有一种方法可以确定web服务是否是通过RESTful路由调用的,并且我只能在这种情况下进行解码?您可以查看请求对象,例如
base.Request.PathInfo
对,谢谢。现在我正在服务内部进行检查,以便如果base.Request.PathInfo.ToLower().StartsWith(“/tickets/”),那么我将执行UrlDecode(Request.Status)。这对我很有用,所以这很好。然而。。。您认为ServiceStack是否应该对路由参数进行URL解码,以便在REST和json/syncreply调用中提供一致的体验?