我有一个服务堆栈应用程序,测试服务收到一个简单的请求,但我发现收到的请求值与原始请求不匹配。
我发送: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”
答案 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>