编码问题服务堆栈,报价和尖括号被剥离

时间:2012-11-28 10:04:12

标签: urlencode servicestack

我有一个服务堆栈应用程序,测试服务收到一个简单的请求,但我发现收到的请求值与原始请求不匹配。

我发送:http://localhost/testapp/test?value=%22test%20data%22%20%3C12345%3E

但代码输出:测试数据“12345>

请注意缺少的第一个双引号和丢失的左手角括号。

为什么应用程序会删除第一个“和”<“的任何想法?它是某种XSS保护的一部分吗?

我的代码:

public class TestService : RestServiceBase<RequestDto>, IRestService<RequestDto>
{
    public override object OnGet(RequestDto request)
    {
       return request.Value;
    }
}

public class RequestDto
{
    public string Value { get; set; }
}

首先允许服务堆栈接收带有“&lt;”的请求。我不得不将应用程序web.config切换为使用:requestValidationMode =“2.0”

2 个答案:

答案 0 :(得分:2)

这也已在即将发布的servicestack中得到修复。

有关详细信息,请参阅此github issue

答案 1 :(得分:1)

您需要将整个值包装在引号中并转义内部引号。这是因为querystring参数需要ServiceStack JSV格式。这意味着:

  

具有以下任何字符的任何字符串:[] {},“已转义   使用CSV样式转义,其中值用双引号括起来

有关详细信息,请参阅http://www.servicestack.net/docs/text-serializers/json-csv-jsv-serializers

您需要传递您的价值

?Value="""test data"" <12345>"

?Value=%22%22%22test%20data%22%22%20%3C12345%3E%22

这将被反序列化为'

"test data" <12345>